Als Teil unserer fortlaufenden Bash-Tutorial-Reihe haben wir in unserem vorherigen Artikel über Bash-Positionsparameter gesprochen. Lassen Sie uns in diesem Artikel über die speziellen Bash-Parameter mit einigen praktischen Beispielen für Shell-Skripte diskutieren.
Einige der speziellen Bash-Parameter, die wir in diesem Artikel besprechen werden, sind:$*, $@, $#, $$, $!, $?, $-, $_
Um auf die gesamte Liste der Positionsparameter zuzugreifen, stehen die beiden Sonderparameter $* und $@ zur Verfügung. Abgesehen von doppelten Anführungszeichen sind diese beiden gleichwertig:Beide erweitern sich zur Liste der Positionsparameter, beginnend mit $1 (getrennt durch Leerzeichen).
Innerhalb doppelter Anführungszeichen unterscheiden sie sich jedoch:$* innerhalb eines Paares doppelter Anführungszeichen entspricht der Liste der Positionsparameter, getrennt durch das erste Zeichen von IFS „$1c$2c$3…“.
$@ in doppelten Anführungszeichen entspricht der Liste der Positionsparameter, getrennt durch Leerzeichen ohne Anführungszeichen, d. h. „$1“, „$2″..“$N“.
Beispiel 1:Verwenden Sie Bash $* und $@, um Positionsparameter zu erweitern
Dieses Beispiel zeigt den verfügbaren Wert in $* und $@.
Erstellen Sie zuerst die expan.sh wie unten gezeigt.
$ 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
Als nächstes führen Sie expan.sh wie unten gezeigt aus, um zu sehen, wie $* und $@ funktionieren.
$ ./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
- Das obige Skript exportierte den Wert von IFS (Internal Field Separator) mit dem ‚-‘.
- Dem Skript expan.sh werden drei Parameter übergeben:$1=“This is“,$2=“2″ und $3=“3″.
- Wenn jeder Wert des speziellen Parameters „$*“ gedruckt wird, gibt es nur einen Wert, der der gesamte Positionsparameter ist, begrenzt durch IFS.
- Wohingegen „$@“ Ihnen jeden Parameter als separates Wort gibt.
Beispiel 2:Verwenden Sie $#, um Positionsparameter zu zählen
$# ist der spezielle Parameter in Bash, der Ihnen die Anzahl der Positionsparameter in Dezimalzahl gibt.
Erstellen Sie zuerst arithmetic.sh wie unten gezeigt.
$ 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"
Wenn die Anzahl der Positionsparameter kleiner als 2 ist, werden die Nutzungsinformationen wie unten gezeigt ausgegeben,
$ ./arithemetic.sh 10 Usage: ./arithemetic.sh arg1 arg2
Beispiel 3:Prozessbezogene Parameter – $$ und $!
Der spezielle Parameter $$ gibt die Prozess-ID der Shell an. $! gibt Ihnen die Prozess-ID des zuletzt ausgeführten Hintergrundprozesses.
Das folgende Skript gibt die Prozess-ID der Shell und die Hintergrundprozess-ID der letzten Ausführung aus.
$ cat proc.sh #!/bin/bash echo -e "Process ID=$$" sleep 1000 & echo -e "Background Process ID=$!"
Führen Sie nun das obige Skript aus und überprüfen Sie die Prozess-ID, die gedruckt wird.
$ ./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 $
Beispiel 4:Andere spezielle Bash-Parameter – $?, $-, $_
- $? Gibt den Exit-Status des zuletzt ausgeführten Befehls an.
- $- Optionen, die mit dem eingebauten Befehl set gesetzt werden
- $_ Gibt das letzte Argument an den vorherigen Befehl zurück. Beim Start der Shell gibt es den absoluten Dateinamen des Shell-Skripts an, das ausgeführt wird.
$ 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.
Im obigen Skript gibt die letzte echo-Anweisung „echo -e $_“ ($-Unterstrich) auch hB aus, was der Wert des letzten Arguments des vorherigen Befehls ist. Also gibt $_ den Wert nach der Erweiterung aus
$ ./others.sh ./others.sh /home/oracle Sorry, Command execution failed ! hB hB