test: Unterschied zwischen den Versionen
Michi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Michi (Diskussion | Beiträge) |
||
Zeile 24: | Zeile 24: | ||
|- | |- | ||
| <tt>!=</tt> || Zeichenketten sind < | | <tt>!=</tt> || Zeichenketten sind <b>nicht</b> identisch. || | ||
[ "$string1" != "$string2" ] | [ "$string1" != "$string2" ] | ||
|- | |- | ||
| <tt>- | | <tt>-b</tt> || (block) Prüfen, ob die Datei vorhanden und ein blockorientiertes Gerät ist. | ||
|- | |- | ||
| <tt> | | <tt>-c</tt> || (character) Prüfen, ob die Datei vorhanden und ein zeichenorientiertes Gerät ist. | ||
|- | |- | ||
| <tt>- | | <tt>-d</tt> || (directory) Prüfen, ob die Datei vorhanden und ein Verzeichnis ist. | ||
|- | |- | ||
| <tt>- | | <tt>-e</tt> || (file) Prüfen, ob die Datei vorhanden ist. | ||
|- | |- | ||
| <tt>-f</tt> || (file) Prüfen, ob die Datei | | <tt>-f</tt> || (file) Prüfen, ob die Datei vorhanden und eine normale Datei ist (also kein Link o. ä.). | ||
|- | |- | ||
| <tt>- | | <tt>-n</tt> || (not zero) Prüfen, ob die Zeichenkette (z. B. eine Variable) nicht leer ist. || | ||
[ "$string" ] | |||
[ -n "$string" ] | |||
|- | |- | ||
| <tt>- | | <tt>-r</tt> || (read) Prüfen, ob die Datei vorhanden ist und Leseerlaubnis hat. | ||
|- | |- | ||
| <tt>- | | <tt>! -r</tt> || (read) Prüfen, ob die Datei vorhanden ist und <b>keine</b> Leseerlaubnis hat. | ||
|- | |- | ||
| <tt>-s</tt> || (size) Prüfen, ob die Datei | | <tt>-s</tt> || (size) Prüfen, ob die Datei vorhanden ist und mehr als 0 byte enthält. | ||
|- | |- | ||
| <tt>- | | <tt>-w</tt> || (write) Prüfen, ob die Datei vorhanden ist und Schreiberlaubnis hat. | ||
|- | |||
| <tt>-x</tt> || (executable) Prüfen, ob die Datei vorhanden und ausführbar ist. | |||
|- | |- | ||
| <tt>-z</tt> || (zero) Prüfen, ob die Zeichenkette leer ist. || | | <tt>-z</tt> || (zero) Prüfen, ob die Zeichenkette leer ist. || | ||
[ -z "$string" ] | [ -z "$string" ] | ||
|- | |- | ||
| <tt>-a</tt> || (and) Prüfen ob beide kombinierten<tt> test</tt>-Abfragen erfolgreich sind (UND-Verknüpfung).<br>Wenn die Datei "$Datvon" Leseberechtigung hat UND nicht bereits eine normale Datei namens "$Datnach" existiert, soll "$Datvon" unter dem Namen "$Datnach" kopiert werden. || | | <tt>-a</tt> || (and) Prüfen ob beide kombinierten<tt> test</tt>-Abfragen erfolgreich sind (UND-Verknüpfung).<br>Wenn die Datei "$Datvon" Leseberechtigung hat UND nicht bereits eine normale Datei namens "$Datnach" existiert, soll "$Datvon" unter dem Namen "$Datnach" kopiert werden. || |
Version vom 27. Dezember 2015, 13:10 Uhr
Der Shell-Befehl test prüft, ob eine vorgegebene Bedingung erfüllt ist oder nicht.
Um einen sicheren Befehlsablauf zu gewährleisten, müssen vorab die Voraussetzungen geprüft werden (Plausibilitätsprüfungen). test wird verwendet
- um zu prüfen, ob eine Datei existiert, welchem Dateityp sie angehört und welche Zugriffsrechte gesetzt sind.
- um zu prüfen, ob bestimmte Zeichenfolgen (engl. strings) vorhanden sind.
- um Zeichenfolgen miteinander zu vergleichen. Hierbei kann auf Textgleichheit abgefragt werden oder bei Zahlen können algebraische Vergleiche vorgenommen werden.
Als Ergebnis des Befehls test wird bei Erfolg der Exit-Status 0 zurückgeliefert, bei Misserfolg ein Wert ungleich 0. Dieses Ergebnis wird nicht angezeigt, kann aber abgefragt werden.
Optionen
Es kann jeweils nur eine Option abgefragt werden.
Option | Beschreibung | Beispiel |
---|---|---|
= | Zeichenketten sind identisch. |
[ "$string1" = "$string2" ] Variable $start ist "yes". [ "$start" = yes ] |
!= | Zeichenketten sind nicht identisch. |
[ "$string1" != "$string2" ] |
-b | (block) Prüfen, ob die Datei vorhanden und ein blockorientiertes Gerät ist. | |
-c | (character) Prüfen, ob die Datei vorhanden und ein zeichenorientiertes Gerät ist. | |
-d | (directory) Prüfen, ob die Datei vorhanden und ein Verzeichnis ist. | |
-e | (file) Prüfen, ob die Datei vorhanden ist. | |
-f | (file) Prüfen, ob die Datei vorhanden und eine normale Datei ist (also kein Link o. ä.). | |
-n | (not zero) Prüfen, ob die Zeichenkette (z. B. eine Variable) nicht leer ist. |
[ "$string" ] [ -n "$string" ] |
-r | (read) Prüfen, ob die Datei vorhanden ist und Leseerlaubnis hat. | |
! -r | (read) Prüfen, ob die Datei vorhanden ist und keine Leseerlaubnis hat. | |
-s | (size) Prüfen, ob die Datei vorhanden ist und mehr als 0 byte enthält. | |
-w | (write) Prüfen, ob die Datei vorhanden ist und Schreiberlaubnis hat. | |
-x | (executable) Prüfen, ob die Datei vorhanden und ausführbar ist. | |
-z | (zero) Prüfen, ob die Zeichenkette leer ist. |
[ -z "$string" ] |
-a | (and) Prüfen ob beide kombinierten test-Abfragen erfolgreich sind (UND-Verknüpfung). Wenn die Datei "$Datvon" Leseberechtigung hat UND nicht bereits eine normale Datei namens "$Datnach" existiert, soll "$Datvon" unter dem Namen "$Datnach" kopiert werden. |
#!/bin/sh echo "Welche Datei soll kopiert werden?" read Datvon echo "Wie soll die kopierte Datei heissen?" read Datnach if [ -r $Datvon -a ! -f $Datnach ] then cp $Datvon $Datnach fi |
-o | (or) Prüfen ob mindestens eine der kombinierten test-Abfragen erfolgreich ist (ODER-Verknüpfung). Abfrage, ob die Antwort "ja" ODER "j" ist. Alle anderen Eingaben (z. B. "Ja" oder "JA") sind nicht erfolgreich. |
#!/bin/sh echo "Soll die Datei $1 gelöscht werden?" read Antwort if [ "$Antwort" = "j" -o "$Antwort" = "ja" ] then rm $1 fi |
-eq | (equal) Prüfen, ob zwei Zahlen gleich sind. |
[ $n1 -eq $n2 ] |
-ne | (not equal) Prüfen, ob zwei Zahlen nicht gleich sind. |
[ $n1 -ne $n2 ] |
-lt | (less than) Prüfen, ob die erste Zahl kleiner ist als die zweite. | Überprüfung, ob mindestens zwei Parameter angegeben wurden.
#!/bin/sh if [ "$#" -lt "2" ] then echo "Es müssen mindestens zwei Parameter angegeben werden" exit fi |
-le | (less equal) Prüfen, ob die erste Zahl kleiner oder gleich ist wie die zweite. |
[ $n1 -le $n2 ] |
-gt | (greater than) Prüfen, ob die erste Zahl grösser ist als die zweite. |
[ $n1 -gt $n2 ] |
-ge | (greater equal) Prüfen, ob die erste Zahl grösser oder gleich ist wie die zweite. |
[ $n1 -ge $n2 ] |
Verwendung
Überprüfung ob es sich bei der Datei "file" um eine normale Datei handelt. Falls dies zutrifft, wird die Datei angezeigt.
test -f file && more file
oder (ab Unix System V)
[ -f file ] && more file
Überprüfung ob es sich bei der Datei "file" um eine normale Datei handelt. Falls dies nicht zutrifft, erscheint auf dem Bildschirm eine entsprechende Ausgabe.
test -f file || echo "file ist keine Datei"
oder (ab Unix System V)
[ -f file ] || echo "file ist keine Datei"
Überprüfung, ob zwei ASCII-Zeichenfolgen gleich sind.
test zeichenfolge1 = zeichenfolge2
oder (ab Unix System V)
[ "string1" = "string2" ]
Überprüfung, ob das Verzeichnis "/tmp" vorhanden ist. Danach wird der Exitstatus ausgegeben (im Fall des Vorhandenseins ein "0").
[ -d /tmp ]; echo $?
Überprüfung, ob das Verzeichnis "/tmp" vorhanden ist. Falls ja, so wird "OK" ausgegeben.
[ -d /tmp ] && echo OK
Überprüfung, ob das Verzeichnis "/tmp" vorhanden ist. Falls nein, so wird "NOK" ausgegeben.
[ -d /tmp ] || echo NOK
Überprüfung, ob das Verzeichnis "/tmp" vorhanden ist. Falls nein, so wird "NOK" ausgegeben und "exit 1" ausgeführt.
[ -d /tmp ] || { echo NOK; exit 1; }
Überprüfung, ob zwei ASCII-Zeichenfolgen nicht gleich sind.
test "string1" != "string2"
Abfrage, ob die Antwort "ja" ist. Alle anderen Eingaben (z. B. "Ja" oder "j") sind nicht erfolgreich.
echo "Soll die Datei $1 gelöscht werden?" read Antwort if [ "$Antwort" = "ja" ] then rm $1 fi
Weblinks
Herausgeber | Sprache | Webseitentitel | Anmerkungen |
---|---|---|---|
Wikipedia | eng | test (Unix)wbm | Enzyklopädischer Artikel |