test: Unterschied zwischen den Versionen

Aus Mikiwiki
Wechseln zu: Navigation, Suche
Zeile 3: Zeile 3:
 
Um einen sicheren Befehlsablauf zu gewährleisten, müssen vorab die Voraussetzungen geprüft werden (Plausibilitätsprüfungen). test wird verwendet
 
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 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 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.
 
* um Zeichenfolgen miteinander zu vergleichen. Hierbei kann auf Textgleichheit abgefragt werden oder bei Zahlen können algebraische Vergleiche vorgenommen werden.
  

Version vom 15. August 2011, 14:22 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.

Inhaltsverzeichnis

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" ]
-r (read) Prüfen, ob die Datei existiert und Leseerlaubnis hat.
! -r (read) Prüfen, ob die Datei existiert und keine Leseerlaubnis hat.
-w (write) Prüfen, ob die Datei existiert und Schreiberlaubnis hat.
-x (executable) Prüfen, ob die Datei existiert und ausführbar ist.
-f (file) Prüfen, ob die Datei existiert und es eine normale Datei ist (also kein Link o. ä.).
-b (block) Prüfen, ob die Datei existiert und ein blockorientiertes Gerät ist.
-c (character) Prüfen, ob die Datei existiert und ein zeichenorientiertes Gerät ist.
-d (directory) Prüfen, ob die Datei existiert und ein Verzeichnis ist.
-s (size) Prüfen, ob die Datei existiert und mehr als 0 byte enthält.
-n (not zero) Prüfen, ob die Zeichenkette (z. B. eine Variable) nicht leer ist.
[ "$string" ]
[ -n "$string" ]
-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
country US.gif Wikipedia eng test (Unix)wbm Enzyklopädischer Artikel