Parameterzugriff in Shell-Skripten:
Shell-Skripts können mit Parametern aufgerufen werden, auf die über ihre
Positionsnummer zugegriffen werden kann. Die Parameter können zusätzlich mit vordefinierten Werten belegt werden (später mehr). Trennung zweier Parameter durch die in IFS definierten Zeichen.
Positionsparameter | Bedeutung |
$# |
Anzahl der Argumente |
$0 |
Name des Kommandos |
$1 |
1. Argument |
. . . . |
. . . . |
$9 |
9. Argument |
$@ |
alle Argumente (z. B. für Weitergabe an Subshell) |
$* |
alle Argumente konkateniert (--> ein einziger String) |
Zur Verdeutlichung soll ein
kleines Beispiel-Shell-Skript dienen:
#!/bin/sh
echo "Mein Name ist $0"
echo "Mir wurden $# Parameter übergeben"
echo "1. Parameter = $1"
echo "2. Parameter = $2"
echo "3. Parameter = $3"
echo "Alle Parameter zusammen: $*"
echo "Meine Prozeßnummer PID = $$"
Nachdem dieses Shell-Skript mit einem Editor erstellt wurde, muß es noch
ausführbar gemacht werden (chmod u+x foo). Anschließend wird es
gestartet und erzeugt die folgenden Ausgaben auf dem Bildschirm:
$ ./foo eins zwei drei vier
Mein Name ist ./foo
Mir wurden 4 Parameter übergeben
1. Parameter = eins
2. Parameter = zwei
3. Parameter = drei
Alle Parameter zusammen: eins zwei drei vier
Meine Prozeßnummer PID = 3212
$
Anmerkung: So, wie Programme und Skripts des UNIX-Systems in Verzeichnissen wie
/bin oder /usr/bin zusammengefaßt werden, ist es empfehlenswert, im Home-Directory
ein Verzeichnis bin einzurichten, das Programme und Skripts aufnimmt. Die Variable
PATH wird dann in der Datei .profile durch die Zuweisung PATH=$PATH:$HOME/bin
erweitert. Damit die Variable PATH auch in Subshells (d. h. beim Aufruf von Skripts) auch
wirksam wird, muß sie exportiert werden:
export PATH
Alle exportierten Variablen bilden das Environment für die Subshells. Information
darüber erhält man mit dem Kommandos:
set: Anzeige von Shellvariablen und Environmentvariablen
oder
env: Anzeige der Environmentvariablen
In Shellskripts kann es sinnvoll sein, die Variablen in Anführungszeichen
("...") zu setzen, um Fehler zu verhindern. Beim Aufruf müssen Parameter,
die Sonderzeichen enthalten ebenfalls in Anführungszeichen (am besten '...')
gesetzt werden. Dazu ein Beispiel. Das Skript "zeige" enthält folgende
Zeile:
grep $1 dat.adr
Der Aufruf zeige 'Hans Meier' liefert nach der Ersetzung das fehlerhafte
Kommando grep Hans Meier dat.adr, das nach dem Namen 'Hans' in der
Adreßdatei dat.adr und einer (vermutlich nicht vorhandenen) Datei namens
'Meier' sucht. Die Änderung von "zeige":
grep "$1" dat.adr
liefert bei gleichem Parameter die korrekte Version grep "Hans Meier"
dat.adr. Die zweite Quoting-Alternative grep '$1' dat.adr ersetzt
den Parameter überhaupt nicht und sucht nach der Zeichenkette "$1".
Das Skript "zeige" soll nun enthalten:
echo "Die Variable XXX hat den Wert $XXX"
Nun wird eingegeben:
$ XXX=Test
$ zeige
Als Ausgabe erhält man:
Die Variable XXX hat den Wert
Erst wenn die Variable "exportiert" wird, erhält man das gewünschte
Ergebnis:
$ XXX=Test
$ export XXX
$ zeige
Die Variable XXX hat den Wert Test
Das Skript "zeige" enthalte nun die beiden Kommandos:
echo "zeige wurde mit $# Parametern aufgerufen:"
echo "$*"
Die folgenden Kommandoaufrufe zeigen die Behandlung unterschiedlicher Parameter:
$ zeige
zeige wurde mit 0 Parametern aufgerufen:
$zeige eins zwei 3
zeige wurde mit 3 Parametern aufgerufen:
eins zwei 3
$ zeige eins "Dies ist Parameter 2" drei
zeige wurde mit 3 Parametern aufgerufen:
eins Dies ist Parameter 2 drei
Die Definition von Variablen und Shell-Funktionen (siehe später) kann man mit
unsetwieder Rückgängig machen.
|