test
test - prüft Dateien und vergleicht Werte
Beschreibung
Vor allem bei Skripten verwendet, um zu testen, ob eine Datei vorhanden ist und ob sie den richtigen Typ hat.
Installation
Syntax
test <Datei>
test <Wert1> OPTION <Wert2>
- Nur test ohne Parameter oder Ausdrücke liefert immer den Wert FALSCH.
- Ein test ! ohne Parameter oder Ausdrücke liefert immer den Wert WAHR.
- Um herauszufinden, welcher Wert herauskommt, muss man echo $? eingeben. 0 ist wahr, 1 ist falsch.
Vor und hinter dem Operator ein Leerzeichen, sonst wird es als ein Ausdruck wahrgenommen
test ; echo Der Errorlevel ist $?
Der Errorlevel ist 1
test ! ; echo Der Errorlevel ist $?
Der Errorlevel ist 0
Optionen
Parameter
Umgebungsvariablen
Exit-Status
Anwendung
Problembehebung
Konfiguration
Dateien
Anhang
Siehe auch
Dokumentation
Man-Pages
Info-Pages
Links
Projekt
Weblinks
Quelle
- Manpage von test
test
$ test Ausdruck
test liefert in Abhängigkeit vom Wahrheitswert des Ausdrucks 0 (wahr) oder 1 (falsch) zurück und ist damit ein wichtiger Bestandteil vieler Shellskripten.
Es existieren mannigfaltige Klassen von Tests. Doch bevor wir Ihnen eine Auswahl verfügbarer Tests vorstellen, möchten wir auf eine alternative Schreibweise hinweisen, die gern bei bedingter Ausführung eingesetzt wird.
Im nachfolgenden Beispiel sind die beiden Zeilen semantisch äquivalent:
test -z $DISPLAY [ -z $DISPLAY ]
Beachten Sie, dass nach der öffnenden eckigen Klammer und vor der schließenden zwingend ein Whitespace stehen muss!
Die wohl wichtigsten Tests befassen sich mit Dateien(alle Tests schließen einen Existenztest der Datei mit ein):
-b/-c | Test auf Gerätedatei (Block/Character): | test -b - /dev/hda; echo $?
0 test -b /dev/console; echo $? 1 |
-d | Test auf Verzeichnis: | for i in $(ls|head -5); do
>(test -d $i && echo "$i ist ein Verzeichnis") >|| echo "$i ist kein Verzeichnis" > done Desktop ist ein Verzeichnis Linuxfibel ist ein Verzeichnis Systemprogrammierung ist ein Verzeichnis allekapitel.htm ist kein Verzeichnis amanda.rpm ist kein Verzeichnis |
-e | Existenz der Datei | |
-f | Test auf normale Datei: | test -f /dev/hda; echo $?
1 |
-k | Test, ob das »sticky«-Flag auf ein Verzeichnis gesetzt ist: | test -k /tmp; echo $?
0 |
-p | Test auf Pipe: | test -p /dev/xconsole; echo $?
0 |
-r/-w/-x | Test auf Lese-/Schreib-/Ausführungsrecht | |
-s | Test, ob eine Datei nicht leer ist | |
-u | Test, ob das »suid«-Flag auf einer Datei gesetzt ist: | test -u /usr/bin/passwd; echo $?
0 |
Datei_1 -nt Datei_2 bzw. Datei_1 -ot Datei_2
Test, ob Datei_1 »neuer« bzw. »älter« ist als die Datei_2
Datei_1 -ef Datei_2
Test, ob Datei_1 und Datei_2 den selben Inode auf demselben Device besitzen (die eine Datei ist ein harter Link auf die andere):
ln bla foo test bla -ef foo; echo $? 0
Des Weiteren existieren eine Reihe von Operatoren zum Vergleich von Zeichenketten:
-z Zeichenkette
Der Test ist wahr, wenn die Zeichenkette die Länge 0 hat
-n string
Der Test ist wahr, wenn die Länge der Zeichenkette >0 ist
Zeichenkette_1 == Zeichenkette_2
Wahr, wenn die Zeichenketten gleich sind
Zeichenkette_1 != Zeichenkette_2
Wahr, wenn die Zeichenketten ungleich sind
Zeichenkette_1 < Zeichenkette_2
Wahr, wenn die Zeichenkette_1 lexikalisch kleiner ist als Zeichenkette_2
Zeichenkette_1 > Zeichenkette_2
Wahr, wenn die Zeichenkette_1 lexikalisch größer ist als Zeichenkette_2
Eine vielseitige Anwendung ist der Vergleich von Argumenten mit den Operatoren -eq (gleich), -ne (ungleich), -gt (größer als), -lt (kleiner als), -ge (größer als oder gleich) und -le (kleiner als oder gleich):
# Überprüfung der Anzahl Parameter in einem Shellskript... if [ "$#" -lt "3" ]; then echo "Zu wenige Parameter"; exit 1; fi
Anmerkung Die Prüfung und Beendigung eines Skripts im Fehlerfall lässt sich eleganter über die Parametersubstitution realisieren:
# Elegante Überprüfung der Anzahl Parameter in einem Shellskript... var_3 = ${3:?Zu wenige Parameter}
Mehrere Tests können kombiniert werden:
! Negation -a Logisches UND zweier Tests -o Logisches ODER zweier Tests test -b /dev/null -o -c /dev/null test $? -eq 0 && echo "Gerätedatei" Gerätedatei
Links
Dateien
Man-Pages
Intern
Weblinks