এই টিউটোরিয়ালটি ব্যাখ্যা করে কিভাবে আপনার ব্যাশ স্ক্রিপ্টে কমান্ড-লাইন আর্গুমেন্ট পাস করতে হয়। আপনাকে শুরু করতে সাহায্য করার জন্য অনেক উদাহরণ রয়েছে৷
ব্যাশ/শেল স্ক্রিপ্টগুলি আপনার লিনাক্স ওয়ার্কফ্লোকে স্বয়ংক্রিয় করার এবং আপনার কর্মদিবসের গতি বাড়ানোর একটি দুর্দান্ত উপায় যাতে আপনি অফিস থেকে তাড়াতাড়ি চলে যেতে পারেন (অথবা বিকাল 5টা হিট হওয়া পর্যন্ত সার্ভার রুমে লুকিয়ে থাকতে পারেন)।
স্ক্রিপ্টগুলিকে পুনরায় ব্যবহারযোগ্য করা সেগুলিকে আরও উপযোগী করে তোলে – আপনাকে এমন একটি স্ক্রিপ্ট লিখতে হবে না যা তথ্যের বিভিন্ন সেটের জন্য বা বিভিন্ন দিনে একই কাজ করে – আপনি একই স্ক্রিপ্ট পুনরায় ব্যবহার করতে পারেন এবং বিভিন্ন প্যারামিটার<প্রদান করতে পারেন - কমান্ড লাইনের মাধ্যমে স্ক্রিপ্টে দেওয়া নির্দেশাবলী। এটি কখনও কখনও কমান্ড লাইন আর্গুমেন্ট ব্যবহার করা নামেও পরিচিত .
উদাহরণস্বরূপ, আপনার কাছে একটি স্ক্রিপ্ট থাকতে পারে যা একটি ফাইলে কিছু পাঠ্য আউটপুট করে। আপনি যদি ফাইলের নাম পরিবর্তন করতে চান তবে আপনাকে স্ক্রিপ্টটি সম্পাদনা করতে হবে। আপনি যদি স্ক্রিপ্টটি একাধিক ফাইলে আউটপুট করতে চান তবে আপনার হাতে স্ক্রিপ্টের একাধিক কপির প্রয়োজন হতে পারে। প্যারামিটার ব্যবহার করে, আপনার কাছে একটি একক স্ক্রিপ্ট থাকতে পারে যা প্যারামিটার হিসাবে পাস করা যেকোন নাম সহ যেকোন সংখ্যক ফাইলে আউটপুট করতে পারে। কমান্ড লাইন থেকে।
এই প্যারামিটার পাস করার কয়েকটি ভিন্ন উপায় আছে – বিকল্প এবং তাদের মান - আপনার স্ক্রিপ্টে, আপনি কি অর্জন করার চেষ্টা করছেন তার উপর নির্ভর করে। উদাহরণ সহ এখানে কয়েকটি পদ্ধতি রয়েছে:
getopts / কমান্ড লাইন ইনপুট পড়ার পতাকা পদ্ধতি
- getopts একটি শেল কমান্ড যা বিকল্পগুলি পুনরুদ্ধার করে (বা পতাকা ) কমান্ড লাইন ইনপুট থেকে এবং তাদের মান তৈরি করে (বা যুক্তি ) আপনার স্ক্রিপ্টে ব্যবহারের জন্য উপলব্ধ
- বিকল্পগুলি হল একটি – (ড্যাশ) এর আগে একটি একক অক্ষর, তারপরে পাস করার মান, যেমন -v মান
- অর্ডার কোন ব্যাপার না হলে সবচেয়ে ভালো ব্যবহার করা হয়
- সম্ভবত এখানে তালিকাভুক্ত সমস্ত পদ্ধতির মধ্যে সেরা
getopts ব্যাশ স্ক্রিপ্ট উদাহরণ
এই উদাহরণ স্ক্রিপ্ট একটি ফাস্ট-ফুড অর্ডারের জন্য তিনটি বিকল্প নেয়:
- -o অর্ডার এর জন্য
- -s আকারের জন্য
- -d পানীয়ের জন্য
fastFoodOrder.sh
#!/bin/bash # Use a while loop to parse through the options o, s, d while getopts o:s:d: flag do # Match each option (which has been assigned to the $flag variable) to it's meaning using a case statement block # OPTARG will be the value received from getopts for the corresponding option and is assigned to a variable depending on the flag case "${flag}" in o) order=${OPTARG};; s) size=${OPTARG};; d) drink=${OPTARG};; esac done # The values as passed to the options are now available in their corresponding variable echo "Order: $order"; echo "Size: $size"; echo "Drink: $drink";
#!/bin/bash সম্পর্কে আরও জানতে এখানে ক্লিক করুন ব্যাশ স্ক্রিপ্টের শুরুতে লাইন।
এটি চালানোর জন্য, নিম্নলিখিত লিখুন:
bash ./fastFoodOrder.sh -d Cola -o 'Fish Burger Meal' -s Large
যার ফলে স্ক্রিপ্ট আউটপুট হবে:
Order: Fish Burger Meal Size: Large Drink: Cola
আপনি উপরের আউটপুটে দেখতে পাচ্ছেন - যে অর্ডারে বিকল্পগুলি সরবরাহ করা হয়েছিল তা কোন ব্যাপার নয়৷
স্ক্রিপ্ট চালানোর সময় কেন ./ ব্যবহার করা হয়?
একই বিকল্পে একাধিক মান পাস করা
একাধিক মানগুলির জন্য একটি বিকল্প একাধিকবার পাস করাও সম্ভব - সেগুলি তারপর একটি অ্যারে হিসাবে স্ক্রিপ্টে উপলব্ধ হবে৷
এটি একটি একক বিকল্পে একাধিক মান পাস করার সর্বোত্তম উপায় কারণ এটি মানটিতে যেকোনো অক্ষর ব্যবহার করার অনুমতি দেয় - উদ্ধৃতিতে মানগুলি পাস করা বা একটি বিভাজন ব্যবহার করা এটিকে সীমিত করবে৷
fastFoodOrderExtras.sh
#!/bin/bash # Use a while loop to parse through the options o, s, d, e while getopts o:s:d:e: flag do # Match each option (which has been assigned to the $flag variable) to it's meaning using a case statement block # OPTARG will be the value received from getopts for the corresponding option and is assigned to a variable depending on the flag case "${flag}" in o) order=${OPTARG};; s) size=${OPTARG};; d) drink=${OPTARG};; e) extras+=${OPTARG};;# Create or append an array variable to hold the multiple extras values passed esac done # The values as passed to the options are now available in their corresponding variable echo "Order: $order"; echo "Size: $size"; echo "Drink: $drink"; echo "The list of extras is '${extras[@]}'" # Loop through the multiple extras values for val in "${extras[@]}"; do echo $val done
উপরের স্ক্রিপ্টটি একাধিক -e গ্রহণ করে অতিরিক্ত যোগ করার বিকল্পগুলি, যেমনটি নীচে দেখানো হয়েছে:
bash ./fastFoodOrderExtras.sh -d Cola -o 'Fish Burger Meal' -s Large -e Sauce -e Salt -e Pepper
স্ক্রিপ্ট আউটপুট হবে:
Order: Fish Burger Meal Size: Large Drink: Cola The list of extras is 'SauceSaltPepper' SauceSaltPepper
স্ক্রিপ্টে অবস্থানগত পরামিতি ব্যবহার করা
- যখন একটি নির্দিষ্ট ক্রমে আর্গুমেন্ট/প্যারামিটারের একটি পরিচিত সংখ্যা থাকবে তখন ব্যবহৃত হয়
- সরল স্ক্রিপ্টের জন্য সবচেয়ে ভালো ব্যবহার করা হয়
উদাহরণ
fastFoodOrder.sh
#!/bin/bash echo "Order: $1"; echo "Size: $2"; echo "Drink: $3";
এটি চালানোর জন্য, নিম্নলিখিত লিখুন:
bash ./fastFoodOrder.sh 'Fish Burger Meal' Large Cola
যার ফলে স্ক্রিপ্ট আউটপুট হবে:
Order: Fish Burger Meal Size: Large Drink: Cola
মনে রাখবেন যে বিকল্পগুলি যদি অর্ডারের বাইরে দেওয়া হয় তবে মানগুলি সব মিশ্রিত হবে। এই পদ্ধতি ব্যবহার করে অবস্থান গুরুত্বপূর্ণ!
bash ./fastFoodOrder.sh 'Fish Burger Meal' Cola Large
এর ফলে মানগুলিকে ভুলভাবে বরাদ্দ করা হবে:
Order: Fish Burger Meal Size: Cola Drink: Large
কমান্ড লাইন প্যারামিটার পড়ার জন্য লুপ ব্যবহার করা
- সবচেয়ে ভালো ব্যবহার করা হয় যখন বিকল্প/আর্গুমেন্টের সংখ্যা আগে থেকে জানা না থাকে
- উদাহরণস্বরূপ, আপনি একটি রেসিপির জন্য উপাদানগুলির একটি তালিকা সরবরাহ করছেন
- এটি বিল্ট-ইন ভেরিয়েবল ব্যবহার করে [email protected], যেটিতে ব্যবহারকারীর দ্বারা সরবরাহ করা সমস্ত ইনপুট বিকল্পগুলির একটি অ্যারে রয়েছে
উদাহরণ
recipe.sh
#!/bin/bash i=1; # This value is the iterator value - the current number of loops that have completed for ingredient in "[email protected]" # loop through [email protected] which is an array of all passed input parameters do echo "Ingredient number $i is $ingredient";# Print the $ingredient which was passed to the script when it was called i=$((i + 1)); # Increment the iterator value so we know how many times we have looped done
এটি চালান:
sh ./recipe.sh bread lettuce cheese hamburger
যা আউটপুট করবে:
Ingredient number 1 is bread Ingredient number 2 is lettuce Ingredient number 3 is cheese Ingredient number 4 is hamburger