test: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 13: Zeile 13:


{| class=wikitable width=100%
{| class=wikitable width=100%
! width=5% | Option !! Beschreibung !! Beispiel
! width=5% | Option !! width=50% | Beschreibung !! Beispiel
|-
|-
| <tt>=</tt> || Zeichenketten sind identisch. ||
| <tt>=</tt> || Zeichenfolgen sind identisch. ||


  [ "${ZEICHENKETTE_1}" = "${ZEICHENKETTE_2}" ]
  [ "${ZEICHENFOLGE_1}" = "${ZEICHENFOLGE_2}" ]


Variable VARIABLE ist "ja".
test ${ZEICHENFOLGE_1} = ${ZEICHENFOLGE_2}
 
Inhalt der Variable VARIABLE ist "ja".


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


  [ "${ZEICHENKETTE_1}" != "${ZEICHENKETTE_2}" ]
  [ "${ZEICHENFOLGE_1}" != "${ZEICHENFOLGE_2}" ]
 
test "${ZEICHENFOLGE_1}" != "${ZEICHENFOLGE_1}"
|-
|-
| <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 56: Zeile 60:
  [ -z "${ZEICHENKETTE}" ]
  [ -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 <code>test</code>-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
  #!/bin/sh
Zeile 67: Zeile 71:
  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). || Abfrage, ob die Antwort "ja" ODER "j" ist. Alle anderen Eingaben (z. B. "Ja" oder "JA") sind nicht erfolgreich.


  #!/bin/sh
  #!/bin/sh
Zeile 84: Zeile 88:
  [ ${ZAHL_1} -ne ${ZAHL_2} ]
  [ ${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. ||  
 
[ ${ZAHL_1} -lt ${ZAHL_2} ]
 
Überprüfung, ob mindestens zwei Parameter angegeben wurden.


  #!/bin/sh
  #!/bin/sh
Zeile 101: Zeile 109:
  [ ${ZAHL_1} -gt ${ZAHL_2} ]
  [ ${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 als oder gleich ist wie die zweite. ||


  [ ${ZAHL_1} -ge ${ZAHL_2} ]
  [ ${ZAHL_1} -ge ${ZAHL_2} ]
Zeile 108: Zeile 116:
== Verwendung ==
== Verwendung ==


Überprüfung ob es sich bei der Datei "file" um eine normale Datei handelt. Falls dies zutrifft, wird die Datei angezeigt.
Das folgende testet, ob die Zeichenfolge "a" dieselbe Zeichenfolge wie "a" ist. Falls dies zutrifft lautet der Exit code 0, ansonsten 1. Der Exit code 0 bedeutet dabei grundsätzlich nur, dass der Befehl normal und ohne Fehler beendet wurde, und das macht ihn wahr.
test -f file && more file
 
oder (ab Unix System V)


  [ -f file ] && more file
  $ <b>[ "a" = "a" ]</b>
$ <b>echo $?</b>
0


Überprüfung ob es sich bei der Datei "file" um eine normale Datei handelt. Falls dies <i>nicht</i> zutrifft, erscheint auf dem Bildschirm eine entsprechende Ausgabe.
$ <b>[ "a" = "b" ]</b>
$ <b>echo $?</b>
1


  test -f file || echo "file ist keine Datei"
Überprüfung ob es sich bei der Datei "datei" um eine normale Datei handelt. Falls dies zutrifft, wird die Datei angezeigt.
   
$ <b>test -f datei && more datei</b>


oder (ab Unix System V)
oder (ab Unix System V)


  [ -f file ] || echo "file ist keine Datei"
  $ <b>[ -f datei ] && more datei</b>


Überprüfung, ob zwei ASCII-Zeichenfolgen gleich sind.
Überprüfung ob es sich bei der Datei "datei" um eine normale Datei handelt. Falls dies <b>nicht</b> zutrifft, erscheint auf dem Bildschirm eine entsprechende Ausgabe.


  test zeichenfolge1 = zeichenfolge2
  $ <b>test -f datei || echo "datei ist keine Datei"</b>


oder (ab Unix System V)
oder (ab Unix System V)


  [ "string1" = "string2" ]
  $ <b>[ -f datei ] || echo "datei ist keine Datei"</b>


Überprüfung, ob das Verzeichnis "/tmp" vorhanden ist. Danach wird der Exitstatus ausgegeben (im Fall des Vorhandenseins ein "0").
Überprüfung, ob das Verzeichnis "/tmp" vorhanden ist. Danach wird der Exitstatus ausgegeben (im Fall des Vorhandenseins ein "0").


  [ -d /tmp ]; echo $?
  $ <b>[ -d /tmp ]; echo $?</b>


Überprüfung, ob das Verzeichnis "/tmp" vorhanden ist. Falls ja, so wird "OK" ausgegeben.
Überprüfung, ob das Verzeichnis "/tmp" vorhanden ist. Falls ja, so wird "OK" ausgegeben.


  [ -d /tmp ] && echo OK
  $ <b>[ -d /tmp ] && echo "OK"</b>
 
Ü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.
Überprüfung, ob das Verzeichnis "/tmp" vorhanden ist. Falls nein, so wird "ERROR" ausgegeben.


  [ -d /tmp ] || { echo NOK; exit 1; }
  $ <b>[ -d /tmp ] || echo "ERROR"</b>


Überprüfung, ob zwei ASCII-Zeichenfolgen <i>nicht</i> gleich sind.
Überprüfung, ob das Verzeichnis "/tmp" vorhanden ist. Falls nein, so wird "ERROR" ausgegeben und "exit 1" ausgeführt.


  test "string1" != "string2"
  $ <b>[ -d /tmp ] || { echo "ERROR"; exit 1; }</b>


Abfrage, ob die Antwort "ja" ist. Alle anderen Eingaben (z. B. "Ja" oder "j") sind nicht erfolgreich.
Abfrage, ob die Antwort "ja" ist. Alle anderen Eingaben (z. B. "Ja" oder "j") sind nicht erfolgreich.
Zeile 156: Zeile 162:
  echo "Soll die Datei $1 gelöscht werden?"
  echo "Soll die Datei $1 gelöscht werden?"
  read Antwort
  read Antwort
  if [ "$Antwort" = "ja" ]
  if [ "${Antwort}" = "ja" ]
   then rm $1
   then rm $1
  fi
  fi

Aktuelle Version vom 6. Mai 2024, 10:44 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
= Zeichenfolgen sind identisch.
[ "${ZEICHENFOLGE_1}" = "${ZEICHENFOLGE_2}" ]
test ${ZEICHENFOLGE_1} = ${ZEICHENFOLGE_2}

Inhalt der Variable VARIABLE ist "ja".

[ "${VARIABLE}" = "ja" ]
!= Zeichenfolgen sind nicht identisch.
[ "${ZEICHENFOLGE_1}" != "${ZEICHENFOLGE_2}" ]
test "${ZEICHENFOLGE_1}" != "${ZEICHENFOLGE_1}"
-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.
[ ${ZAHL_1} -lt ${ZAHL_2} ]

Ü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 als oder gleich ist wie die zweite.
[ ${ZAHL_1} -ge ${ZAHL_2} ]

Verwendung

Das folgende testet, ob die Zeichenfolge "a" dieselbe Zeichenfolge wie "a" ist. Falls dies zutrifft lautet der Exit code 0, ansonsten 1. Der Exit code 0 bedeutet dabei grundsätzlich nur, dass der Befehl normal und ohne Fehler beendet wurde, und das macht ihn wahr.

$ [ "a" = "a" ]
$ echo $?
0
$ [ "a" = "b" ]
$ echo $?
1

Überprüfung ob es sich bei der Datei "datei" um eine normale Datei handelt. Falls dies zutrifft, wird die Datei angezeigt.

$ test -f datei && more datei

oder (ab Unix System V)

$ [ -f datei ] && more datei

Überprüfung ob es sich bei der Datei "datei" um eine normale Datei handelt. Falls dies nicht zutrifft, erscheint auf dem Bildschirm eine entsprechende Ausgabe.

$ test -f datei || echo "datei ist keine Datei"

oder (ab Unix System V)

$ [ -f datei ] || echo "datei ist keine Datei"

Ü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 "ERROR" ausgegeben.

$ [ -d /tmp ] || echo "ERROR"

Überprüfung, ob das Verzeichnis "/tmp" vorhanden ist. Falls nein, so wird "ERROR" ausgegeben und "exit 1" ausgeführt.

$ [ -d /tmp ] || { echo "ERROR"; exit 1; }

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