GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Spezielle Bash-Parameter mit 4 Beispiel-Shell-Skripten erklärt

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

Linux
  1. Bash -c mit Positionsparametern?

  2. Welches sind die speziellen Parameter/Variablen der (Bash-)Shell?

  3. Gemeinsame Nutzung von Variablen über mehrere Shell-Skripte hinweg?

  4. Ist es möglich, ein Bash-Shell-Skript mit einem anderen Befehlszeilenprogramm interagieren zu lassen?

  5. Umgang mit mehr als 10 Parametern in der Shell

Bash-Scripting – Variablen mit Beispielen erklärt

Bash-Scripting – Printf-Befehl mit Beispielen erklärt

Bash-Scripting – Assoziatives Array mit Beispielen erklärt

So erstellen Sie Dokumente mit Bash-Skripten

So verwenden Sie den Echo-Befehl in Bash-Skripten unter Linux

Lernen Sie Multithreading-Bash-Skripte mit GNU Parallel