শেল স্ক্রিপ্টিংয়ে দীর্ঘ বিকল্পগুলি ব্যবহারের "যথাযথ উপায়" হ'ল getopt GNU ইউটিলিটি । এর রয়েছে getopts একটি ব্যাশ বিল্ট-ইন যে , কিন্তু এটি শুধুমাত্র মত সংক্ষিপ্ত অপশন দেয় -t
। getopt
ব্যবহারের কয়েকটি উদাহরণ এখানে পাওয়া যাবে ।
এখানে এমন একটি স্ক্রিপ্ট রয়েছে যা দেখায় যে আমি কীভাবে আপনার প্রশ্নের কাছে যেতে পারি। বেশিরভাগ পদক্ষেপের ব্যাখ্যাটি স্ক্রিপ্টের মধ্যেই মন্তব্য হিসাবে যুক্ত করা হয়।
#!/bin/bash
# GNU getopt allows long options. Letters in -o correspond to
# comma-separated list given in --long.
opts=$(getopt -o t --long test -- "$*")
test $? -ne 0 && exit 2 # error happened
set -- $opts # some would prefer using eval set -- "$opts"
# if theres -- as first argument, the script is called without
# option flags
if [ "$1" = "--" ]; then
echo "Not testing"
testing="n"
# Here we exit, and avoid ever getting to argument parsing loop
# A more practical case would be to call a function here
# that performs for no options case
exit 1
fi
# Although this question asks only for one
# option flag, the proper use of getopt is with while loop
# That's why it's done so - to show proper form.
while true; do
case "$1" in
# spaces are important in the case definition
-t | --test ) testing="y"; echo "Testing" ;;
esac
# Loop will terminate if there's no more
# positional parameters to shift
shift || break
done
echo "Out of loop"
কয়েকটি সরলীকরণ এবং সরানো মন্তব্য সহ, এটিকে ঘনীভূত করা যেতে পারে:
#!/bin/bash
opts=$(getopt -o t --long test -- "$*")
test $? -ne 0 && exit 2 # error happened
set -- $opts
case "$1" in
-t | --test ) testing="y"; echo "Testing";;
--) testing="n"; echo "Not testing";;
esac