উত্তর:
বাশের জন্য এখানে একটি উদাহরণ রয়েছে:
usage="$(basename "$0") [-h] [-s n] -- program to calculate the answer to life, the universe and everything
where:
-h show this help text
-s set the seed value (default: 42)"
seed=42
while getopts ':hs:' option; do
case "$option" in
h) echo "$usage"
exit
;;
s) seed=$OPTARG
;;
:) printf "missing argument for -%s\n" "$OPTARG" >&2
echo "$usage" >&2
exit 1
;;
\?) printf "illegal option: -%s\n" "$OPTARG" >&2
echo "$usage" >&2
exit 1
;;
esac
done
shift $((OPTIND - 1))
এটি কোনও ফাংশনের অভ্যন্তরে ব্যবহার করতে:
"$FUNCNAME"
পরিবর্তে ব্যবহার করুন$(basename "$0")
local OPTIND OPTARG
কল করার আগে যোগ করুনgetopts
basename
নেতৃস্থানীয় ড্যাশটির সাথে "-বাশ" দেওয়ার চেষ্টা করছে ।
"$FUNCNAME"
না "$0"
। এছাড়াও, যোগ করুনlocal OPTIND OPTARG
FUNCNAME
কাজ করে। আমার একক ফাইলে আমার সমস্ত ফাংশন রয়েছে তাই এটি অন্যের জন্য দরকারী কিছুতে প্রসারিত করার জন্য এটি উপযুক্ত।
"$usage"
প্রতিটি জায়গার উদ্ধৃতি নিশ্চিত করুন ।
shift $((OPTIND - 1))
জন্য?
শেল স্ক্রিপ্টের প্রথম আর্গুমেন্টটি ভেরিয়েবল হিসাবে উপলব্ধ $1
, তাই সহজ বাস্তবায়ন হবে
if [ "$1" == "-h" ]; then
echo "Usage: `basename $0` [somestuff]"
exit 0
fi
তবে অনুভা কী বলল।
[
এটি পসিক্স-অনুবর্তী সংস্করণ।
function
: আপনি যদি আপনার ফাংশনটি চালানোর পরে শেলটি শেষ করতে না চান তবে আপনার exit 0
সাথে প্রতিস্থাপন করা উচিত return
। (আমি এটি এর আগে 😂 করেছি)
এটি একটি অংশ যা আমি এটি একটি ভিএনসি সার্ভার শুরু করতে ব্যবহার করি
#!/bin/bash
start() {
echo "Starting vnc server with $resolution on Display $display"
#your execute command here mine is below
#vncserver :$display -geometry $resolution
}
stop() {
echo "Killing vncserver on display $display"
#vncserver -kill :$display
}
#########################
# The command line help #
#########################
display_help() {
echo "Usage: $0 [option...] {start|stop|restart}" >&2
echo
echo " -r, --resolution run with the given resolution WxH"
echo " -d, --display Set on which display to host on "
echo
# echo some stuff here for the -a or --add-options
exit 1
}
################################
# Check if parameters options #
# are given on the commandline #
################################
while :
do
case "$1" in
-r | --resolution)
if [ $# -ne 0 ]; then
resolution="$2" # You may want to check validity of $2
fi
shift 2
;;
-h | --help)
display_help # Call your function
exit 0
;;
-d | --display)
display="$2"
shift 2
;;
-a | --add-options)
# do something here call function
# and write it in your help function display_help()
shift 2
;;
--) # End of all options
shift
break
;;
-*)
echo "Error: Unknown option: $1" >&2
## or call function display_help
exit 1
;;
*) # No more options
break
;;
esac
done
######################
# Check if parameter #
# is set too execute #
######################
case "$1" in
start)
start # calling function start()
;;
stop)
stop # calling function stop()
;;
restart)
stop # calling function stop()
start # calling function start()
;;
*)
# echo "Usage: $0 {start|stop|restart}" >&2
display_help
exit 1
;;
esac
এটি কিছুটা অদ্ভুত যে আমি একটি আলাদা ক্ষেত্রে স্টার্ট স্টপ পুনরায় আরম্ভ করেছি তবে এটি কাজ করা উচিত
if
যদি আপনার কাছে কেবলমাত্র চেক করার জন্য একটি একক বিকল্প থাকে এবং এটি সর্বদা প্রথম বিকল্প ( $1
) থাকে তবে সহজ সমাধানটি if
একটি পরীক্ষা ( [
) সহ হয়। উদাহরণ স্বরূপ:
if [ "$1" == "-h" ] ; then
echo "Usage: `basename $0` [-h]"
exit 0
fi
নোট করুন যে পোস্টিক্সের সামঞ্জস্যের =
পাশাপাশি কাজ করবে ==
।
$1
?$1
উদ্ধৃতিতে আবশ্যক হওয়ার কারণটি হ'ল যদি না থাকে $1
তবে শেলটি চালানোর চেষ্টা করবে if [ == "-h" ]
এবং ব্যর্থ হবে কারণ ==
যখন দুটি প্রত্যাশা ছিল তখন কেবল একটি একক যুক্তি দেওয়া হয়েছিল:
$ [ == "-h" ]
bash: [: ==: unary operator expected
getopt
বাgetopts
হিসাবে প্রস্তাব দ্বারা অন্যদের , আপনি একটি একক সহজ বিকল্প চেয়ে বেশি থাকে, অথবা প্রয়োজন হলে একটি আর্গুমেন্ট গ্রহণ করতে আপনার বিকল্প, তাহলে আপনি স্পষ্টভাবে ব্যবহারের অতিরিক্ত জটিলতা জন্য যেতে হবে getopts
।
একটি দ্রুত রেফারেন্স হিসাবে, আমি 60 সেকেন্ডের getopts টিউটোরিয়ালটি পছন্দ করি । †
আপনি getopt
শেলটি বিল্ট শেলের পরিবর্তে প্রোগ্রামটি বিবেচনা করতে চাইতে পারেন getopts
। এটি দীর্ঘ বিকল্পগুলি এবং অপশন যুক্তির পরে বিকল্পগুলি (উদাহরণস্বরূপ কেবল foo a b c --verbose
না বরং foo -v a b c
) ব্যবহারের অনুমতি দেয় । এই স্ট্যাকওভারফ্লো উত্তরটি কীভাবে জিএনইউ ব্যবহার করতে হয় তা ব্যাখ্যা করে getopt
।
† জেফবায়ার্নস উল্লেখ করেছেন যে মূল লিঙ্কটি মারা গিয়েছিল তবে ধন্যবাদ যেভাবে ফিরে যন্ত্রটি সংরক্ষণাগারভুক্ত করেছিল।
ব্যাশের গিওপ্ট সুবিধা ব্যবহার করা আরও ভাল। আরও সহায়তার জন্য দয়া করে এই প্রশ্নোত্তরটি দেখুন: ল্যাশ এবং শর্ট কমান্ড লাইনের বিকল্পগুলি পেতে ব্যাশ শেল স্ক্রিপ্টে গোটপট ব্যবহার করুন
আমি মনে করি আপনি এটির জন্য কেসটি ব্যবহার করতে পারেন ...
case $1 in
-h) echo $usage ;;
h) echo $usage ;;
help) echo $usage ;;
esac