আমাদের চলমান ব্যাশ টিউটোরিয়াল সিরিজের অংশ হিসাবে, আমরা আমাদের পূর্ববর্তী নিবন্ধে ব্যাশ অবস্থানগত পরামিতি সম্পর্কে আলোচনা করেছি। এই প্রবন্ধে কিছু ব্যবহারিক শেল স্ক্রিপ্ট উদাহরণ সহ ব্যাশ বিশেষ প্যারামিটার সম্পর্কে আলোচনা করা যাক।
কিছু ব্যাশ বিশেষ প্যারামিটার যা আমরা এই নিবন্ধে আলোচনা করব তা হল:$*, $@, $#, $$, $!, $?, $-, $_
অবস্থানগত পরামিতিগুলির সম্পূর্ণ তালিকা অ্যাক্সেস করতে, দুটি বিশেষ পরামিতি $* এবং $@ উপলব্ধ। দ্বিগুণ উদ্ধৃতিগুলির বাইরে, এই দুটি সমতুল্য:উভয়ই $1 (স্পেস দ্বারা পৃথক) দিয়ে শুরু হওয়া অবস্থানগত পরামিতিগুলির তালিকায় প্রসারিত হয়।
দ্বিগুণ উদ্ধৃতিগুলির মধ্যে, যাইহোক, তারা পৃথক:$* এক জোড়া দ্বিগুণ উদ্ধৃতিগুলির মধ্যে অবস্থানগত পরামিতিগুলির তালিকার সমতুল্য, যা IFS "$1c$2c$3…" এর প্রথম অক্ষর দ্বারা পৃথক করা হয়েছে৷
এক জোড়া দ্বিগুণ উদ্ধৃতিগুলির মধ্যে $@ অবস্থানগত পরামিতিগুলির তালিকার সমতুল্য, উদ্ধৃত শূন্যস্থান দ্বারা পৃথক করা হয়, যেমন, "$1" "$2″.."$N"৷
উদাহরণ 1:পজিশনাল প্যারামিটারগুলি প্রসারিত করতে ব্যাশ $* এবং $@ ব্যবহার করুন
এই উদাহরণটি $* এবং $@ এ উপলব্ধ মান দেখায়।
প্রথমে, নিচের মত expan.sh তৈরি করুন।
<কেন্দ্র> কেন্দ্র>$ cat expan.sh #!/bin/bash export IFS='-' cnt=1 # Printing the data available in $* echo "Values of \"\$*\":" for arg in "$*" do echo "Arg #$cnt= $arg" let "cnt+=1" done cnt=1 # Printing the data available in $@ echo "Values of \"\$@\":" for arg in "$@" do echo "Arg #$cnt= $arg" let "cnt+=1" done
এরপরে, $* এবং $@ কিভাবে কাজ করে তা দেখতে নিচের মত expan.sh চালান।
$ ./expan.sh "This is" 2 3 Values of "$*": Arg #1= This is-2-3 Values of "$@": Arg #1= This is Arg #2= 2 Arg #3= 3
- উপরের স্ক্রিপ্টটি '-' দিয়ে IFS (অভ্যন্তরীণ ক্ষেত্র বিভাজক) এর মান রপ্তানি করেছে।
- স্ক্রিপ্ট expan.sh $1=”এটি”,$2=”2″ এবং $3=”3″ এ তিনটি প্যারামিটার পাস করা হয়েছে।
- বিশেষ প্যারামিটার “$*” এর প্রতিটি মান প্রিন্ট করার সময়, এটি শুধুমাত্র একটি মান দেয় যা IFS দ্বারা সীমাবদ্ধ সমগ্র অবস্থানগত প্যারামিটার।
- যেহেতু “$@” আপনাকে প্রতিটি প্যারামিটার একটি আলাদা শব্দ হিসেবে দেয়।
উদাহরণ 2:অবস্থানগত পরামিতি গণনা করতে $# ব্যবহার করুন
$# হল ব্যাশে বিশেষ প্যারামিটার যা আপনাকে দশমিকে অবস্থানগত প্যারামিটারের সংখ্যা দেয়।
প্রথমে, নীচে দেখানো হিসাবে arithmetic.sh তৈরি করুন।
$ cat arithmetic.sh #!/bin/bash if [ $# -lt 2 ] then echo "Usage: $0 arg1 arg2" exit fi echo -e "\$1=$1" echo -e "\$2=$2" let add=$1+$2 let sub=$1-$2 let mul=$1*$2 let div=$1/$2 echo -e "Addition=$add\nSubtraction=$sub\nMultiplication=$mul\nDivision=$div\n"
অবস্থানগত পরামিতির সংখ্যা 2-এর কম হলে, এটি নীচে দেখানো হিসাবে ব্যবহারের তথ্য নিক্ষেপ করবে,
$ ./arithemetic.sh 10 Usage: ./arithemetic.sh arg1 arg2
উদাহরণ 3:প্রক্রিয়া সম্পর্কিত পরামিতি - $$ এবং $!
বিশেষ প্যারামিটার $$ শেলের প্রসেস আইডি দেবে। $! আপনাকে অতি সম্প্রতি সম্পাদিত ব্যাকগ্রাউন্ড প্রক্রিয়ার প্রসেস আইডি দেয়।
নিচের স্ক্রিপ্টটি শেলের প্রসেস আইডি এবং শেষ এক্সিকিউট ব্যাকগ্রাউন্ড প্রসেস আইডি প্রিন্ট করে।
$ cat proc.sh #!/bin/bash echo -e "Process ID=$$" sleep 1000 & echo -e "Background Process ID=$!"
এখন, উপরের স্ক্রিপ্টটি চালান এবং প্রসেস আইডিটি চেক করুন যা এটি মুদ্রণ করছে।
$ ./proc.sh Process ID=9502 Background Process ID=9503 $ ps PID TTY TIME CMD 5970 pts/1 00:00:00 bash 9503 pts/1 00:00:00 sleep 9504 pts/1 00:00:00 ps $
উদাহরণ 4:অন্যান্য ব্যাশ বিশেষ প্যারামিটার – $?, $-, $_
- $? অতি সম্প্রতি সম্পাদিত কমান্ডের প্রস্থান অবস্থা দেয়।
- $- সেট বিল্টইন কমান্ড ব্যবহার করে বিকল্পগুলি সেট করা হয়েছে
- $__ পূর্ববর্তী কমান্ডের শেষ যুক্তি দেয়। শেল স্টার্টআপে, এটি চালানো শেল স্ক্রিপ্টের পরম ফাইলের নাম দেয়৷
$ cat others.sh #!/bin/bash echo -e "$_"; ## Absolute name of the file which is being executed /usr/local/bin/dbhome # execute the command. #check the exit status of dbhome if [ "$?" -ne "0" ]; then echo "Sorry, Command execution failed !" fi echo -e "$-"; #Set options - hB echo -e $_ # Last argument of the previous command.
উপরের স্ক্রিপ্টে, শেষ ইকো স্টেটমেন্ট "echo -e $_" ($ underscore) hB প্রিন্ট করে যা আগের কমান্ডের শেষ আর্গুমেন্টের মান। তাই $_ প্রসারণের পরে মান দেবে
$ ./others.sh ./others.sh /home/oracle Sorry, Command execution failed ! hB hB