উত্তর:
শেল কমান্ড এবং যে কমান্ড কোনো আর্গুমেন্ট প্রদর্শিত হিসাবে সংখ্যাযুক্ত শেল ভেরিয়েবল: $0
, ভালো কিছু কমান্ড নিজেই স্ট্রিং মান আছে script
, ./script
, /home/user/bin/script
বা যাই হোক না কেন। আর্গুমেন্টগুলি হিসাবে প্রদর্শিত "$1"
, "$2"
, "$3"
ইত্যাদি। আর্গুমেন্টের গণনাটি শেল ভেরিয়েবলে "$#"
।
এটি মোকাবেলার সাধারণ উপায়গুলি শেল কমান্ডগুলি getopts
এবং জড়িত shift
। getopts
অনেকটা সি getopt()
লাইব্রেরির ফাংশনের মতো। shift
মান চলে আসে $2
কাছে $1
, $3
থেকে $2
, ইত্যাদি; $#
হ্রাস পায়। কোডটি কোনও ক্রিয়া স্থির করার জন্য … "$1"
ব্যবহার করে জিনিসগুলি করার মান এবং তারপরে পরবর্তী যুক্তিটিতে যাওয়ার জন্য একটি করণীয় সমাপ্ত করে । এটি কেবল কখনও পরীক্ষা করতে হবে , এবং হতে পারে ।case
esac
shift
$1
$1
$#
আর্গুমেন্ট নম্বরটি $n
যেখানে n
রয়েছে তার সাথে আপনি পাস হওয়া আর্গুমেন্টগুলিতে অ্যাক্সেস করতে পারেন 1, 2, 3, ...
। আপনি অন্য কোনও কমান্ডের মতো আর্গুমেন্টগুলি পাস করেন।
$ cat myscript
#!/bin/bash
echo "First arg: $1"
echo "Second arg: $2"
$ ./myscript hello world
First arg: hello
Second arg: world
$/shellscriptname.sh argument1 argument2 argument3
আপনি একটি শেল স্ক্রিপ্টের আউটপুট অন্য শেল স্ক্রিপ্টের আর্গুমেন্ট হিসাবে পাস করতে পারেন।
$/shellscriptname.sh "$(secondshellscriptname.sh)"
শেল স্ক্রিপ্টের মধ্যে আপনি $1
প্রথম আর্গুমেন্ট এবং $2
দ্বিতীয় আর্গুমেন্ট ইত্যাদির মতো সংখ্যার সাথে যুক্তিগুলি অ্যাক্সেস করতে পারেন ।
ফর্ম
$ ./script.sh "$@"
সবচেয়ে সুবিধাজনক জন্য argv
। আরগ ডিলিমিটারটি সাদা স্থান, তবে পরিবর্তন করা যায়। কীভাবে বন্ধ মনে আছে। তারপরে ব্যবহার করুন
$1, $2, shift, if [ $# -ne 3 ]
প্রবাহ নিয়ন্ত্রণ করতে আমি সাধারণত গিপটপস আলিঙ্গন করি না যদি একটি case ... esac
ইচ্ছা যথেষ্ট হয়।
বাশ স্ক্রিপ্টে, আমি ব্যক্তিগতভাবে প্যারামিটারগুলি সেট করতে নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করতে চাই:
#!/bin/bash
helpFunction()
{
echo ""
echo "Usage: $0 -a parameterA -b parameterB -c parameterC"
echo -e "\t-a Description of what is parameterA"
echo -e "\t-b Description of what is parameterB"
echo -e "\t-c Description of what is parameterC"
exit 1 # Exit script after printing help
}
while getopts "a:b:c:" opt
do
case "$opt" in
a ) parameterA="$OPTARG" ;;
b ) parameterB="$OPTARG" ;;
c ) parameterC="$OPTARG" ;;
? ) helpFunction ;; # Print helpFunction in case parameter is non-existent
esac
done
# Print helpFunction in case parameters are empty
if [ -z "$parameterA" ] || [ -z "$parameterB" ] || [ -z "$parameterC" ]
then
echo "Some or all of the parameters are empty";
helpFunction
fi
# Begin script in case all parameters are correct
echo "$parameterA"
echo "$parameterB"
echo "$parameterC"
এই কাঠামোর সাহায্যে আমরা পরামিতিগুলির ক্রমের উপর নির্ভর করি না, কারণ আমরা তাদের প্রত্যেককে একটি মূল চিঠি নির্ধারণ করছি। এছাড়াও, সহায়তা কার্যটি প্যারামিটারগুলি ভুলভাবে সংজ্ঞায়িত করা হয় এমন সমস্ত সময়ে মুদ্রণ করা হবে। এটি হ্যান্ডেল করার জন্য বিভিন্ন পরামিতি সহ আমাদের প্রচুর স্ক্রিপ্ট থাকে যখন এটি খুব কার্যকর। এটি নিম্নলিখিত হিসাবে কাজ করে:
$ ./myscript -a "String A" -b "String B" -c "String C"
String A
String B
String C
$ ./myscript -a "String A" -c "String C" -b "String B"
String A
String B
String C
$ ./myscript -a "String A" -c "String C" -f "Non-existent parameter"
./myscript: illegal option -- f
Usage: ./myscript -a parameterA -b parameterB -c parameterC
-a Description of what is parameterA
-b Description of what is parameterB
-c Description of what is parameterC
$ ./myscript -a "String A" -c "String C"
Some or all of the parameters are empty
Usage: ./myscript -a parameterA -b parameterB -c parameterC
-a Description of what is parameterA
-b Description of what is parameterB
-c Description of what is parameterC
শেল স্ক্রিপ্টে; এটি পরিবর্তনশীল নাম হয়ে যায় $ 1। দ্বিতীয় শব্দটি ভেরিয়েবলের নাম $ 2 এবং আরও কিছু হয়।
cat << 'EOF' > test
echo "First arg: $1"
echo "Second arg: $2"
echo "List of all arg: $@"
EOF
sh test hello world
Http://heirloom.sourceforge.net/sh/sh.1.html এ শেল (sh) ম্যানুয়ালটিতে আরও পাওয়া যাবে
যদি আপনি পাইথন আরগপার্সের সাথে পরিচিত হন এবং বাশ আর্গুমেন্টগুলি পার্স করার জন্য পাইথনকে কল করতে আপত্তি করেন না তবে ব্যাশ আরগপার্স ( https://github.com/mattbryson/bash-arg-parse ) ব্যবহার করুন,
এখানে একই উত্তরটি দেখুন: https://stackoverflow.com/questions/7069682/how-to-get-arguments-with-flags-in-bash-script/50181287#50181287
#!/bin/bash
echo "First arg: $1"
echo "Second arg: $2"
echo "Your First Argument was $1 & Second Argument was $2" 2> /dev/null
------------------------------------------------------------------------
./scriptname.sh value1 value2
2> /dev/null
, 2) বিদ্যমান উত্তরের সাথে কিছু যুক্ত করে না।
getopt()
একটি অত্যন্ত প্রতিষ্ঠিত মান, তবেgetopt
এক্সিকিউটেবল ডিস্ট্রো / প্ল্যাটফর্ম জুড়ে একই হয় না। আমি এখন পুরোপুরি রূপান্তরিতgetopts
ব্যবহারকারী, কারণ এটি পসিক্স স্ট্যান্ডার্ড।dash
এটিও দুর্দান্ত কাজ করে যা আমার পছন্দের স্ক্রিপ্ট শেল