test: Unterschied zwischen den Versionen

Aus Mikiwiki
Wechseln zu: Navigation, Suche
(Verwendung)
 
Zeile 112: Zeile 112:
 
== Verwendung ==
 
== Verwendung ==
  
Überprüfung ob es sich bei der Datei "file" um eine normale Datei handelt. Falls dies zutrifft, wird die Datei angezeigt.
+
Überprüfung ob es sich bei der Datei "datei" um eine normale Datei handelt. Falls dies zutrifft, wird die Datei angezeigt.
 
   
 
   
  test -f file && more file
+
  test -f datei && more datei
  
 
oder (ab Unix System V)
 
oder (ab Unix System V)
  
  [ -f file ] && more file
+
  [ -f datei ] && more datei
  
Ü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.
+
Ü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 -f file || echo "file ist keine Datei"
+
  test -f datei || echo "datei ist keine Datei"
  
 
oder (ab Unix System V)
 
oder (ab Unix System V)
  
  [ -f file ] || echo "file ist keine Datei"
+
  [ -f datei ] || echo "datei ist keine Datei"
  
 
Überprüfung, ob zwei ASCII-Zeichenfolgen gleich sind.
 
Überprüfung, ob zwei ASCII-Zeichenfolgen gleich sind.
  
  test zeichenfolge1 = zeichenfolge2
+
  test ${ZEICHENFOLGE_1} = ${ZEICHENFOLGE_2}
  
 
oder (ab Unix System V)
 
oder (ab Unix System V)
  
  [ "string1" = "string2" ]
+
  [ "${ZEICHENFOLGE_1}" = "${ZEICHENFOLGE_2}" ]
  
 
Ü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").
Zeile 142: Zeile 142:
 
Ü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
+
  [ -d /tmp ] && echo "OK"
  
Überprüfung, ob das Verzeichnis "/tmp" vorhanden ist. Falls nein, so wird "NOK" ausgegeben.
+
Überprüfung, ob das Verzeichnis "/tmp" vorhanden ist. Falls nein, so wird "ERROR" ausgegeben.
  
  [ -d /tmp ] || echo NOK
+
  [ -d /tmp ] || echo "ERROR"
  
Ü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 und "exit 1" ausgeführt.
  
  [ -d /tmp ] || { echo NOK; exit 1; }
+
  [ -d /tmp ] || { echo "ERROR"; exit 1; }
  
Überprüfung, ob zwei ASCII-Zeichenfolgen <i>nicht</i> gleich sind.
+
Überprüfung, ob zwei ASCII-Zeichenfolgen <b>nicht</b> gleich sind.
  
  test "string1" != "string2"
+
  test "${ZEICHENFOLGE_1}" != "${ZEICHENFOLGE_1}"
  
 
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 160: Zeile 160:
 
  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 26. Juli 2021, 09:19 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.
[ "${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.
[ ${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

Ü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 zwei ASCII-Zeichenfolgen gleich sind.

test ${ZEICHENFOLGE_1} = ${ZEICHENFOLGE_2}

oder (ab Unix System V)

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

Ü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; }

Überprüfung, ob zwei ASCII-Zeichenfolgen nicht gleich sind.

test "${ZEICHENFOLGE_1}" != "${ZEICHENFOLGE_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
country US.gif Wikipedia eng test (Unix)wbm Enzyklopädischer Artikel