हमारी चल रही बैश ट्यूटोरियल श्रृंखला के हिस्से के रूप में, हमने अपने पिछले लेख में बैश स्थितीय मापदंडों के बारे में चर्चा की थी। इस लेख में आइए कुछ व्यावहारिक शेल स्क्रिप्ट उदाहरणों के साथ बैश विशेष मापदंडों के बारे में चर्चा करें।
कुछ बैश विशेष पैरामीटर जिनकी हम इस लेख में चर्चा करेंगे वे हैं:$*, $@, $#, $$, $!, $?, $-, $_
स्थितीय मापदंडों की पूरी सूची तक पहुंचने के लिए, दो विशेष पैरामीटर $* और $@ उपलब्ध हैं। दोहरे उद्धरण चिह्नों के बाहर, ये दोनों समतुल्य हैं:दोनों $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:स्थितीय पैरामीटरों की गणना करने के लिए $# का उपयोग करें
$# बैश में विशेष पैरामीटर है जो आपको दशमलव में स्थितीय पैरामीटर की संख्या देता है।
सबसे पहले, नीचे दिखाए अनुसार अंकगणित बनाएं।
$ 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 $_" ($ अंडरस्कोर) भी hB प्रिंट करता है जो पिछले कमांड के अंतिम तर्क का मान है। तो $_ विस्तार के बाद मूल्य देगा
$ ./others.sh ./others.sh /home/oracle Sorry, Command execution failed ! hB hB