test: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
Zeile 17: Zeile 17:
| <tt>=</tt> || Zeichenketten sind identisch. ||
| <tt>=</tt> || Zeichenketten sind identisch. ||


  [ "$string1" = "$string2" ]
  [ "${ZEICHENKETTE_1}" = "${ZEICHENKETTE_2}" ]


Variable $start ist "yes".
Variable VARIABLE ist "ja".
 
[ "$start" = yes ]


[ "${VARIABLE}" = "ja" ]
|-
|-
| <tt>!=</tt> || Zeichenketten sind <b>nicht</b> identisch. ||
| <tt>!=</tt> || Zeichenketten sind <b>nicht</b> identisch. ||


  [ "$string1" != "$string2" ]
  [ "${ZEICHENKETTE_1}" != "${ZEICHENKETTE_2}" ]
 
|-
|-
| <tt>-b</tt> || (block) Prüfen, ob die Datei vorhanden und ein blockorientiertes Gerät ist.
| <tt>-b</tt> || (block) Prüfen, ob die Datei vorhanden und ein blockorientiertes Gerät ist.
Zeile 39: Zeile 37:
| <tt>-f</tt> || (file) Prüfen, ob die Datei vorhanden und eine normale Datei ist (also kein Link o. ä.).
| <tt>-f</tt> || (file) Prüfen, ob die Datei vorhanden und eine normale Datei ist (also kein Link o. ä.).
|-
|-
| <tt>-n</tt> || (not zero) Prüfen, ob die Zeichenkette (z. B. eine Variable) nicht leer ist. ||
| <tt>-n</tt> || (not zero) Prüfen, ob die Variable ZEICHENKETTE nicht leer ist. ||


  [ "$string" ]
  [ "${ZEICHENKETTE}" ]
  [ -n "$string" ]
  [ -n "${ZEICHENKETTE}" ]
|-
|-
| <tt>-r</tt> || (read) Prüfen, ob die Datei vorhanden ist und Leseerlaubnis hat.
| <tt>-r</tt> || (read) Prüfen, ob die Datei vorhanden ist und Leseerlaubnis hat.
Zeile 56: Zeile 54:
| <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 "${ZEICHENKETTE}" ]
|-
|-
| <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. ||


  #!/bin/sh
  #!/bin/sh
Zeile 68: Zeile 66:
   then cp $Datvon $Datnach
   then cp $Datvon $Datnach
  fi
  fi
|-
|-
| <tt>-o</tt> || (or) Prüfen ob mindestens eine der kombinierten<tt> test</tt>-Abfragen erfolgreich ist (ODER-Verknüpfung).<br>Abfrage, ob die Antwort "ja" ODER "j" ist. Alle anderen Eingaben (z. B. "Ja" oder "JA") sind nicht erfolgreich. ||
| <tt>-o</tt> || (or) Prüfen ob mindestens eine der kombinierten<tt> test</tt>-Abfragen erfolgreich ist (ODER-Verknüpfung).<br>Abfrage, ob die Antwort "ja" ODER "j" ist. Alle anderen Eingaben (z. B. "Ja" oder "JA") sind nicht erfolgreich. ||
Zeile 78: Zeile 75:
   then rm $1
   then rm $1
  fi
  fi
|-
|-
| <tt>-eq</tt> || (equal) Prüfen, ob zwei Zahlen gleich sind. ||  
| <tt>-eq</tt> || (equal) Prüfen, ob zwei Zahlen gleich sind. ||  


  [ $n1 -eq $n2 ]
  [ ${ZAHL_1} -eq ${ZAHL_2} ]
 
|-
|-
| <tt>-ne</tt> || (not equal) Prüfen, ob zwei Zahlen nicht gleich sind. ||  
| <tt>-ne</tt> || (not equal) Prüfen, ob zwei Zahlen nicht gleich sind. ||  


  [ $n1 -ne $n2 ]
  [ ${ZAHL_1} -ne ${ZAHL_2} ]
 
|-
|-
| <tt>-lt</tt> || (less than) Prüfen, ob die erste Zahl kleiner ist als die zweite. || Überprüfung, ob mindestens zwei Parameter angegeben wurden.
| <tt>-lt</tt> || (less than) Prüfen, ob die erste Zahl kleiner ist als die zweite. || Überprüfung, ob mindestens zwei Parameter angegeben wurden.
Zeile 98: Zeile 92:
     exit
     exit
  fi
  fi
|-
|-
| <tt>-le</tt> || (less equal) Prüfen, ob die erste Zahl kleiner oder gleich ist wie die zweite. ||
| <tt>-le</tt> || (less equal) Prüfen, ob die erste Zahl kleiner oder gleich ist wie die zweite. ||


  [ $n1 -le $n2 ]
  [ ${ZAHL_1} -le ${ZAHL_2} ]
 
|-
|-
| <tt>-gt</tt> || (greater than) Prüfen, ob die erste Zahl grösser ist als die zweite. ||
| <tt>-gt</tt> || (greater than) Prüfen, ob die erste Zahl grösser ist als die zweite. ||


  [ $n1 -gt $n2 ]
  [ ${ZAHL_1} -gt ${ZAHL_2} ]
 
|-
|-
| <tt>-ge</tt> || (greater equal) Prüfen, ob die erste Zahl grösser oder gleich ist wie die zweite. ||
| <tt>-ge</tt> || (greater equal) Prüfen, ob die erste Zahl grösser oder gleich ist wie die zweite. ||


  [ $n1 -ge $n2 ]
  [ ${ZAHL_1} -ge ${ZAHL_2} ]
 
|}
|}



Version vom 26. Juli 2021, 07:08 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.
[ "${ZEICHENKETTE_1}" = "${ZEICHENKETTE_2}" ]

Variable VARIABLE ist "ja".

[ "${VARIABLE}" = "ja" ]
!= Zeichenketten sind nicht identisch.
[ "${ZEICHENKETTE_1}" != "${ZEICHENKETTE_2}" ]
-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 Variable ZEICHENKETTE nicht leer ist.
[ "${ZEICHENKETTE}" ]
[ -n "${ZEICHENKETTE}" ]
-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 "${ZEICHENKETTE}" ]
-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.
[ ${ZAHL_1} -eq ${ZAHL_2} ]
-ne (not equal) Prüfen, ob zwei Zahlen nicht gleich sind.
[ ${ZAHL_1} -ne ${ZAHL_2} ]
-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.
[ ${ZAHL_1} -le ${ZAHL_2} ]
-gt (greater than) Prüfen, ob die erste Zahl grösser ist als die zweite.
[ ${ZAHL_1} -gt ${ZAHL_2} ]
-ge (greater equal) Prüfen, ob die erste Zahl grösser oder gleich ist wie die zweite.
[ ${ZAHL_1} -ge ${ZAHL_2} ]

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