Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

बैश विशेष पैरामीटर 4 उदाहरण शैल स्क्रिप्ट के साथ समझाया गया

हमारी चल रही बैश ट्यूटोरियल श्रृंखला के हिस्से के रूप में, हमने अपने पिछले लेख में बैश स्थितीय मापदंडों के बारे में चर्चा की थी। इस लेख में आइए कुछ व्यावहारिक शेल स्क्रिप्ट उदाहरणों के साथ बैश विशेष मापदंडों के बारे में चर्चा करें।

कुछ बैश विशेष पैरामीटर जिनकी हम इस लेख में चर्चा करेंगे वे हैं:$*, $@, $#, $$, $!, $?, $-, $_

स्थितीय मापदंडों की पूरी सूची तक पहुंचने के लिए, दो विशेष पैरामीटर $* और $@ उपलब्ध हैं। दोहरे उद्धरण चिह्नों के बाहर, ये दोनों समतुल्य हैं:दोनों $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

  1. rbash - एक प्रतिबंधित बैश शेल व्यावहारिक उदाहरणों के साथ समझाया गया

    लिनक्स शेल सबसे आकर्षक और शक्तिशाली में से एक है GNU /लिनक्स संचालित उपकरण। X . सहित सभी एप्लिकेशन , शेल के ऊपर बनाया गया है और लिनक्स शेल इतना शक्तिशाली है कि इसका उपयोग करके पूरे लिनक्स सिस्टम को ठीक से नियंत्रित किया जा सकता है। लिनक्स शेल का दूसरा पहलू यह है कि, यह संभावित रूप से हानिकारक हो सकत

  1. शैल ट्रेसिंग के साथ शैल स्क्रिप्ट में कमांड के निष्पादन का पता कैसे लगाएं

    शेल स्क्रिप्ट डिबगिंग श्रृंखला के इस लेख में, हम तीसरे शेल स्क्रिप्ट डिबगिंग मोड की व्याख्या करेंगे, जो कि शेल ट्रेसिंग है और यह कैसे काम करता है, और इसका उपयोग कैसे किया जा सकता है, यह प्रदर्शित करने के लिए कुछ उदाहरण देखें। इस श्रृंखला का पिछला भाग दो अन्य शेल स्क्रिप्ट डिबगिंग मोड पर स्पष्ट रूप

  1. बैश शैल फंक्शन ट्यूटोरियल 6 व्यावहारिक उदाहरणों के साथ

    बैश शेल फ़ंक्शन समूह के लिए एकल नाम का उपयोग करके बाद में निष्पादन के लिए कई UNIX / Linux कमांड को समूहबद्ध करने का एक तरीका है। . बैश शेल फ़ंक्शन को नियमित यूनिक्स कमांड की तरह ही निष्पादित किया जा सकता है। शेल फ़ंक्शंस को मौजूदा शेल संदर्भ में उनकी व्याख्या करने के लिए कोई नई प्रक्रिया बनाए बिना न