3.3 Besondere Parameter
Die hier beschriebenen Variablen wurden zwar bereits kurz in Kapitel 2, Variablen, angesprochen, aber sie passen doch eher in dieses Kapitel. Daher werden diese Variablen jetzt genau erläutert.
3.3.1 Die Variable $*
In der Variablen $* werden alle Argumente in der Kommandozeile (ausgenommen der Scriptname = $0) als eine einzige Zeichenkette gespeichert.
# Beachtet alle Argumente der Kommandozeile
# Name: aargumstr
echo "Scriptname : $0"
echo "Die restlichen Argumente : $*"
Das Script bei der Ausführung:
you@host > ./aargumstr test1 test2 test3
Scriptname : ./aargumstr
Die restlichen Argumente : test1 test2 test3
you@host > ./aargumstr Viel mehr Argumente aber ein String
Scriptname : ./aargumstr
Die restlichen Argumente : Viel mehr Argumente aber ein String
Die Variable $* wird gern bei Shellscripts verwendet, die eine variable Anzahl von Argumenten erwarten. Wenn Sie nicht genau wissen, wie viel Argumente in der Kommandozeile eingegeben werden, müssten Sie Ihr Script immer um die Anzahl der Positionsparameter ($1 bis $n) erweitern. Verwenden Sie hingegen $*, ist die Anzahl der Argumente unwichtig, weil hierbei alle in $* zusammengefasst werden. Dies lässt sich z. B. hervorragend in einer for-Schleife verwenden.
# Eine variable Anzahl von Argumenten
# Name: avararg
for i in $*
do
echo '$*:' $i
done
Das Script bei der Ausführung:
you@host > ./avararg eine variable Anzahl von Argumenten
$*: eine
$*: variable
$*: Anzahl
$*: von
$*: Argumenten
you@host > ./avararg egal wie viele oder wenig
$*: egal
$*: wie
$*: viele
$*: oder
$*: wenig
Die for-Schleife wird in Abschnitt 4.10 ausführlich behandelt. Beachten Sie aber bei dem Beispiel »avararg«: Wenn Sie dem Script ein Argument wie folgt übergeben
you@host > ./avararg "eine variable Anzahl von Argumenten"
sieht die Ausgabe genauso aus wie ohne die doppelten Anführungszeichen, obwohl ja eigentlich nur ein Argument ($1) übergeben wurde. Die Ursache ist hierbei die for-Schleife, welche das Argument anhand der Variablen IFS (hier anhand der Leerzeichen) auftrennt.
Würden Sie in der for-Schleife die Variable $* in doppelte Anführungszeichen setzen, so würde die anschließende Ausgabe wieder zu einer Zeichenkette zusammengefasst:
# Eine variable Anzahl von Argumenten
# Name: avararg2
for i in "$*"
do
echo '$*:' $i
done
Wenn Sie dies nun mit "$*" anstatt $* ausführen, sieht die Ausgabe wie folgt aus:
you@host > ./avararg2 eine variable Anzahl von Argumenten
$*: eine variable Anzahl von Argumenten
3.3.2 Die Variable $@
Im Gegensatz zur Variablen $* fasst die Variable $@ die Argumente in einzelne Zeichenketten zusammen. Die Funktion wird ähnlich verwendet wie $*, nur mit dem eben erwähnten Unterschied. Das Anwendungsgebiet dieser Variablen liegt ebenfalls vorwiegend in einer Schleife, weshalb hierauf im gegebenen Kapitel (siehe Kapitel 4, Kontrollstrukturen, nochmals darauf eingegangen wird.
Merke Alle Argumente (auch mehr als 9) sind durch $* oder $@ erreichbar. $* liefert sie als ein Wort, verkettet mit Leerzeichen, und $@ liefert sie als ein Argument pro Wort.
|
3.3.3 Die Variable $#
Die Variable $# enthält die Anzahl der Argumente, die beim Aufruf des Shellscripts mit angegeben wurden. Als Beispiel dient folgendes Shellscript:
# Anzahl von Argumenten
# Name: acountarg
echo $*
echo "Das sind $# Argumente"
Das Beispiel bei der Ausführung:
you@host > ./acountarg
Das sind 0 Argumente
you@host > ./acountarg test1 test2 test3
test1 test2 test3
Das sind 3 Argumente
Der häufigste Einsatz von $# erfolgt bei einer if-Entscheidungsanweisung, ob die vorgegebene Anzahl von Argumenten übergeben wurde oder nicht. Wenn nicht, können Sie mit einer Fehlermeldung antworten. Vorweggenommen, ohne genauer darauf einzugehen, finden Sie hier einen solch typischen Fall:
# Überprüft die Anzahl von Argumenten
# Name: achkarg
# Wurden weniger als zwei Argumente eingegeben?
if [ $# -lt 2 ] # lt = lower then
then
echo "Mindestens zwei Argumente erforderlich ..."
echo "$0 arg1 arg2 ... arg_n"
exit 1
fi
echo "Anzahl erforderlicher Argumente erhalten"
Das Shellscript bei der Ausführung:
you@host > ./achckarg
Mindestens zwei Argumente erforderlich ...
./acheckarg arg1 arg2 ... arg_n
you@host > ./achckarg test1 test2
Anzahl erforderlicher Argumente erhalten
Mehr zu den Entscheidungsanweisungen mit if erfahren Sie im nächsten Kapitel 4, Kontrollstrukturen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
|