|
|
Bedingungen
Für die meisten Strukturbefehle muss eine Bedingung abgefragt werden.
Dazu gibt es den Befehl
[Das Kommando test]L|L
Ausdruck & Wirkung
Das Beispielskript
[Parameterzahl prüfen]
# Skript dreh - Tauscht Parameter
echo "Ich heiße " $0 " und habe "
$# "Parameter"
if test$
# -eq 2
then
echo 1
else
echo "Falsche Parameterzahl"
fi
Da die Schreibweise mit dem Kommando
[Rechteckige Klammer statt test] # Skript dreh - Tauscht Parameter echo "Ich heiße " $0 " und habe "$ # "Parameter" if [ $# -eq 2 ] then echo$ 2 $1 else echo "Falsche Parameterzahl" fi$ Eine kleine Stolperfalle möchte ich Ihnen nicht vorenthalten. Im folgenden Skript soll eine Diskette formatiert werden, wenn der Parameter »new« angegeben wird. Das Abfragen des Parameters ist fast das gleiche wie beim Abfragen der Anzahl der Parameter.
[Harmlose Abfrage?] if [ $1 = "new" ] then echo "Formatiere..." fi echo "Und los gehts..." Nun rufen Sie das Skript dreimal auf! Einmal mit dem Parameter new, dann mit dem Parameter old und schließlich ohne Parameter. Und da gibt es eine Überraschung!
gaston> trick new Formatiere... Und los gehts... gaston> trick old Und los gehts... gaston> trick ./trick: [: =: unary operator expected Und los gehts... gaston> Die Fehlermeldung sagt aus, dass der Operator = zwei Operanden erwartet hätte, aber nur einer da war. Tatsächlich wird $1 vor dem Vergleich ausgewertet und da dort nichts drin steht, ist zwischen der eckigem Klammer und dem Gleichheitszeichen nichts. Es ist also so, als würde dort folgender Ausdruck stehen:
if [ = "new" ]
Sie können solche Überraschungen vermeiden, indem Sie die Variablen in
Anführungszeichen stellen.
Wie bereits an anderer Stelle erwähnt, bewirken die Anführungszeichen das
Zusammenfassen mehrerer Worte zu einem Parameter, aber es lässt im Gegensatz
zu den Hochkommata die Auswertung der Variablen zu.
[Sichere Abfrage] if [ " $1" = "new" ] then echo "Formatiere..." fi echo "Und los gehts..."$
Auch wenn die Variablenauswertung von $1 leer ist, steht nun links vom
Gleichheitszeichen etwas, nämlich zwei Anführungszeichen, also:
if [ "" = "new" ]
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|