টার্মিনাল কমান্ডে সাধারণত অপশন বা সুইচ থাকে, যেটি আপনি কমান্ড কীভাবে কাজ করে তা পরিবর্তন করতে ব্যবহার করতে পারেন। কমান্ড-লাইন ইন্টারফেসের জন্য POSIX স্পেসিফিকেশনে বিকল্পগুলি অন্তর্ভুক্ত করা হয়েছে। এটি প্রাচীনতম UNIX অ্যাপ্লিকেশনগুলির সাথে প্রতিষ্ঠিত একটি সময়-সম্মানিত কনভেনশনও, তাই যখন আপনি নিজের কমান্ড তৈরি করছেন তখন আপনার ব্যাশ স্ক্রিপ্টগুলিতে কীভাবে সেগুলি অন্তর্ভুক্ত করবেন তা জেনে রাখা ভাল৷
বেশিরভাগ ভাষার মতো, ব্যাশে বিকল্পগুলি পার্স করার সমস্যা সমাধানের বিভিন্ন উপায় রয়েছে। আজ অবধি, আমার প্রিয় পদ্ধতিটি আমি প্যাট্রিক ভলকার্ডিংয়ের স্ল্যাকওয়্যার বিল্ড স্ক্রিপ্ট থেকে শিখেছি, যেটি শেল স্ক্রিপ্টিংয়ের সাথে আমার পরিচয় হিসাবে কাজ করেছিল যখন আমি প্রথম লিনাক্স আবিষ্কার করি এবং OS এর সাথে পাঠানো প্লেইন টেক্সট ফাইলগুলিতে উদ্যোগ করার সাহস করেছিলাম। পি>
ব্যাশে পার্সিং বিকল্প
ব্যাশে বিকল্প পার্স করার কৌশল হল আপনার শেল স্ক্রিপ্টে পাস করা সমস্ত আর্গুমেন্টের মাধ্যমে চক্রাকারে, সেগুলি একটি বিকল্প কিনা তা নির্ধারণ করা এবং তারপরে পরবর্তী আর্গুমেন্টে চলে যাওয়া। এই প্রক্রিয়াটি পুনরাবৃত্তি করুন যতক্ষণ না কোন বিকল্প অবশিষ্ট থাকে।
একটি সাধারণ বুলিয়ান বিকল্প দিয়ে শুরু করুন (কখনও কখনও সুইচ বলা হয় অথবা একটি পতাকা ):
#!/bin/bash
while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
ALPHA=1
shift 1
else
break
fi
done
echo $ALPHA
এই কোডে, আমি একটি while
তৈরি করি loop যা একটি অসীম লুপ হিসাবে কাজ করে যতক্ষণ না প্রক্রিয়া করার জন্য আর কোন আর্গুমেন্ট নেই। একটি if
বিবৃতি প্রথম অবস্থানে পাওয়া যাই হোক না কেন যুক্তি মেলানোর চেষ্টা করে ($1
) হয় --alpha
অথবা -a
. (এগুলি কোন বিশেষ তাৎপর্য ছাড়াই ইচ্ছাকৃত বিকল্পের নাম। একটি প্রকৃত স্ক্রিপ্টে, আপনি --verbose
ব্যবহার করতে পারেন এবং -v
ভার্বোজ আউটপুট ট্রিগার করতে)।
shift
কীওয়ার্ড সমস্ত আর্গুমেন্টকে 1 দ্বারা স্থানান্তরিত করে, যেমন 2 অবস্থানে একটি আর্গুমেন্ট ($2
) অবস্থান 1 এ সরানো হয়েছে ($1
) else
বিবৃতিটি ট্রিগার করা হয় যখন প্রক্রিয়া করার জন্য আর কোন আর্গুমেন্ট থাকে না, যা while
ভাঙে লুপ।
স্ক্রিপ্টের শেষে, $ALPHA
এর মান টার্মিনালে প্রিন্ট করা হয়।
স্ক্রিপ্ট পরীক্ষা করুন:
$ bash ./test.sh --alpha
1
$ bash ./test.sh
$ bash ./test.sh -a
1
বিকল্পটি সঠিকভাবে সনাক্ত করা হয়েছে৷
ব্যাশে আর্গুমেন্ট সনাক্ত করা হচ্ছে
যদিও একটি সমস্যা আছে:অতিরিক্ত যুক্তি উপেক্ষা করা হয়।
$ bash ./test.sh --alpha foo
1
$
বিকল্প হিসাবে অভিপ্রেত নয় এমন আর্গুমেন্টগুলি ধরতে, আপনি বাশ অ্যারেতে অবশিষ্ট আর্গুমেন্টগুলি ডাম্প করতে পারেন৷
#!/bin/bash
while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
ALPHA=1
shift 1
else
break
fi
done
echo $ALPHA
ARG=( "${@}" )
for i in ${ARG[@]}; do
echo $i
done
স্ক্রিপ্টের নতুন সংস্করণ পরীক্ষা করুন:
$ bash ./test.sh --alpha foo
1
foo
$ bash ./test.sh foo
foo
$ bash ./test.sh --alpha foo bar
1
foo
bar
আর্গুমেন্ট সহ বিকল্পগুলি
কিছু বিকল্পের জন্য তাদের নিজস্ব যুক্তি প্রয়োজন। উদাহরণস্বরূপ, আপনি ব্যবহারকারীকে একটি রঙ বা গ্রাফিকের রেজোলিউশন বা আপনার অ্যাপ্লিকেশনটিকে একটি কাস্টম কনফিগারেশন ফাইলে নির্দেশ করার মতো একটি বৈশিষ্ট্য সেট করার অনুমতি দিতে পারেন৷
Bash এ এটি বাস্তবায়ন করতে, আপনি shift
ব্যবহার করতে পারেন কীওয়ার্ড যেমন আপনি বুলিয়ান সুইচের সাথে করেন তবে আর্গুমেন্টগুলিকে 1 এর পরিবর্তে 2 দ্বারা স্থানান্তর করুন।
#!/bin/bash
while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
ALPHA=1
shift 1
elif [ "$1" = "--config" -o "$1" = "-c" ]; then
CONFIG=$2
shift 2
else
break
fi
done
echo $ALPHA
echo $CONFIG
ARG=( "${@}" )
for i in ${ARG[@]}; do
echo $i
done
এই কোডে, আমি একটি elif
যোগ করি --config
উভয়ের সাথে প্রতিটি আর্গুমেন্টের তুলনা করার ক্লজ এবং -c
. মিলের ক্ষেত্রে, CONFIG
নামক একটি ভেরিয়েবলের মান দ্বিতীয় আর্গুমেন্ট যাই হোক না কেন তার মান সেট করা হয় (এর মানে হল --config
বিকল্পের জন্য একটি যুক্তি প্রয়োজন)। --config
শিফট করতে সমস্ত আর্গুমেন্ট 2:1 দ্বারা স্থান পরিবর্তন করে অথবা -c
, এবং 1 এর আর্গুমেন্ট সরাতে। যথারীতি, লুপ পুনরাবৃত্তি হয় যতক্ষণ না কোন মিলিত আর্গুমেন্ট থাকে।
এখানে স্ক্রিপ্টের নতুন সংস্করণের একটি পরীক্ষা রয়েছে:
$ bash ./test.sh --config my.conf foo bar
my.conf
foo
bar
$ bash ./test.sh -a --config my.conf baz
1
my.conf
baz
বিকল্প পার্সিং সহজ করা হয়েছে
Bash এ অপশন পার্স করার অন্যান্য উপায় আছে। আপনি বিকল্পভাবে একটি case
ব্যবহার করতে পারেন বিবৃতি বা getopt
আদেশ আপনি যা ব্যবহার করতে চান না কেন, আপনার ব্যবহারকারীদের জন্য বিকল্পগুলি যেকোনো অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ বৈশিষ্ট্য, এবং ব্যাশ এটিকে সহজ করে তোলে৷