Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

find(1)

ksh(1)

sh(1)

test(1)                                                             test(1)

NAME
     test, [ - Bedingungen prüfen

SYNTAX
     test ausdruck

     [ ausdruck ]

     [[ ausdruck ]]

BESCHREIBUNG
     Das Kommando test bzw. das in die Shell eingebaute Kommando [ prüft,
     ob Bedingungen erfüllt sind. Bedingungen können sein:

     -  Eigenschaften von Dateien,

     -  Eigenschaften und Vergleiche von Zeichenketten und

     -  algebraische Vergleiche ganzer Zahlen.

     Sie können Bedingungen auch verneinen; mehrere Bedingungen können Sie
     miteinander verknüpfen.

     Als Ergebnis liefert test zurück:

     -  Endestatus 0 (wahr), falls die Bedingung erfüllt ist.

     -  Endestatus 1 (falsch), falls die Bedingung nicht erfüllt ist oder
        falls Sie die Bedingung nicht vollständig angegeben haben. Den
        gleichen Endestatus erhalten Sie, wenn Sie keine Bedingung angeben.

     Abhängig vom Endestatus können Sie unterschiedliche Kommandos ausfüh-
     ren, Schleifen abbrechen usw.

     Neben dem Kommando /usr/bin/test gibt es auch das in die Shell einge-
     baute Kommandos test.

     -  Für das in die Bourne-Shell sh eingebaute Kommando test gibt es
        folgende alternative Schreibweise. Die Wirkung ist dieselbe.

        [ ausdruck ]

        Die eckigen Klammern müssen Sie angeben, ebenso das Leerzeichen vor
        bzw. nach ausdruck. Auch in diesem Fall führt die Shell das einge-
        baute sh-Kommando test aus.

     -  Für das in die Korn-Shell ksh eingebaute Kommando test gibt es fol-
        gende alternative Schreibweisen. Die Wirkung ist dieselbe.

        [ ausdruck ] oder [[ ausdruck ]]





Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

test(1)                                                             test(1)

        Die eckigen Klammern müssen Sie angeben, ebenso das Leerzeichen vor
        bzw. nach ausdruck. Für ausdruck haben Sie in der Korn-Shell
        zusätzliche Möglichkeiten (siehe ksh(1), BEDINGTE AUSDRÜCKE).

ARGUMENTE
     ausdruck
          eine Bedingung oder mehrere Bedingungen, die miteinander ver-
          knüpft sein können (siehe Bedingungen verknüpfen).

     Folgende Bedingungen prüft test:

   Eigenschaften von Dateien

     -r datei
          (r - read) wahr, wenn datei existiert und Sie Leserecht haben.

     -w datei
          (w - write) wahr, wenn datei existiert und Sie Schreibrecht
          haben.

     -x datei
          (x - execute) wahr, wenn datei existiert und Sie Ausführrecht
          haben.

     -f datei
          (f - file) wahr, wenn datei existiert und eine einfache Datei
          ist.

     -d datei
          (d - directory) wahr, wenn datei existiert und ein Verzeichnis
          ist.

     -h datei
          wahr, wenn datei existiert und ein symbolischer Verweis ist. Nor-
          malerweise verfolgen alle anderen Bedingungen symbolische Ver-
          weise.

     -c datei
          (c - character device) wahr, wenn datei existiert und eine
          zeichenorientierte Gerätedatei ist.

     -b datei
          (b - block device) wahr, wenn datei existiert und eine block-
          orientierte Gerätedatei ist.

     -p datei
          (p - pipe) wahr, wenn datei existiert und eine benannte Pipe
          (FIFO) ist.

     -u datei
          (u - set user ID) wahr, wenn datei existiert und für den Eigentü-
          mer das s-Bit gesetzt ist.


Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

test(1)                                                             test(1)

     -g datei
          (g - set group ID) wahr, wenn datei existiert und für die Gruppe
          das s-Bit gesetzt ist.

     -k datei
          (k - sticky bit) wahr, wenn datei existiert und das Sticky-Bit
          gesetzt ist.

     -s datei
          (s - size) wahr, wenn datei existiert und nicht leer ist.

     -t dateikennzahl
          (t - terminal) wahr, wenn die angegebene dateikennzahl einem Ter-
          minal zugeordnet ist.

          dateikennzahl
               für dateikennzahl können Sie angeben:

               0  für Standardeingabe

               1  für Standardausgabe

               2  für Standardfehlerausgabe

     datei
          Name der Datei oder des Verzeichnisses, deren Eigenschaften
          geprüft werden sollen. Sie können auch relative oder absolute
          Pfadnamen angeben.

          Wenn Sie im Dateinamen Sonderzeichen der Shell verwenden, prüft
          test nur die erste zu diesem Namen passende Datei.

          Wenn Sie für datei die leere Zeichenkette angeben, also nur zwei
          Anführungszeichen "" oder zwei Hochkommas '', setzt test den
          Namen Ihres aktuellen Verzeichnisses ein.

          Wenn Sie datei nicht angeben, gibt test eine Fehlermeldung aus
          und bricht mit Endestatus 1 ab.

          Sie können für datei auch einen Shell-Parameter angeben. Diesen
          sollten Sie immer in Anführungszeichen "..." einschließen. Wenn
          die entsprechende Shell-Variable nicht definiert ist, erhält test
          als Argument die leere Zeichenkette. Die Anführungszeichen garan-
          tieren also, daß test beim Ersetzen eines Shell-Parameters immer
          ein Argument erhält.









Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

test(1)                                                             test(1)

   Eigenschaften und Vergleiche von Zeichenketten

     Als Zeichenkette können Sie eine beliebige Folge von Zeichen angeben.
     Enthält die Zeichenkette Leer- oder Tabulatorzeichen, müssen Sie diese
     entwerten. Wenn die Shell die Zeichenkette nicht interpretieren soll,
     entwerten Sie die entsprechenden Sonderzeichen mit einem vorangestell-
     ten Gegenschrägstrich \ oder schließen die ganze Zeichenkette in
     Anführungszeichen oder Hochkommas ein.

     Die leere Zeichenkette geben Sie an durch zwei aufeinanderfolgende
     Anführungszeichen oder Hochkommas. Wenn Sie keine Zeichenkette ange-
     ben, gibt test eine Fehlermeldung aus und bricht mit Endestatus 1 ab.

     Sie können als Zeichenkette auch einen Shell-Parameter angeben. Diesen
     sollten Sie immer in Anführungszeichen einschließen. Wenn die entspre-
     chende Shell-Variable nicht definiert ist, erhält test als Argument
     die leere Zeichenkette. Die Anführungszeichen garantieren also, daß
     test beim Ersetzen eines Shell-Parameters immer ein Argument erhält.

     [-n] zeichenkette
          (n - non zero) Wahr, wenn die angegebene zeichenkette nicht die
          leere Zeichenkette ist, also eine Länge größer 0 hat.

          So können Sie testen, ob einer Shell-Variablen ein Wert zugewie-
          sen ist. Den entsprechenden Shell-Parameter schließen Sie in
          Anführungszeichen ein.

          -n nicht angegeben:

          Die Angabe ohne -n hat die gleiche Bedeutung. Mit -n ist die
          Bedingung leichter lesbar.

     -z zeichenkette
          (z - zero) Wahr, wenn die angegebene zeichenkette die leere Zei-
          chenkette ist, also die Länge 0 hat.

          So können Sie feststellen, ob einer Shell-Variablen kein Wert
          zugewiesen ist. Den entsprechenden Shell-Parameter schließen Sie
          in Anführungszeichen ein.

     zeichenkette1 = zeichenkette2
          Wahr, wenn die beiden Zeichenketten identisch sind. Vor und nach
          dem Gleichheitszeichen muß jeweils ein Leerzeichen stehen, da
          test dieses Zeichen als eigenständiges Argument erwartet. Wenn
          Sie Shell-Parameter vergleichen, sollten Sie diese in Anführungs-
          zeichen einschließen.








Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

test(1)                                                             test(1)

     zeichenkette1 != zeichenkette2
          Wahr, wenn die beiden Zeichenketten verschieden sind. Vor und
          nach dem Ungleichheitszeichen muß jeweils ein Leerzeichen stehen,
          da test dieses Zeichen als eigenständiges Argument erwartet. Wenn
          Sie Shell-Parameter vergleichen, schließen Sie diese in Anfüh-
          rungszeichen ein.

     zeichenkette
          Wahr, wenn zeichenkette nicht die leere Zeichenkette ist.

   Algebraische Vergleiche ganzer Zahlen

     Ganze Zahlen können Sie direkt oder als Werte von Shell-Variablen
     angeben. Die angegebenen Zahlenwerte können beliebig groß sein. Einer
     Shell-Variablen können Sie ebenfalls beliebig große Zahlenwerte zuwei-
     sen.

     Wenn Sie als Zahl einen Shell-Parameter angeben, sollten Sie diesen
     immer in Anführungszeichen "..." einschließen. Wenn die entsprechende
     Shell-Variable nicht definiert ist, erhält test als Argument die leere
     Zeichenkette. Die Anführungszeichen garantieren also, daß test beim
     Ersetzen eines Shell-Parameters immer ein Argument erhält.

     zahl1 op zahl2
          test vergleicht die beiden ganzen Zahlen zahl1 und zahl2 alge-
          braisch entsprechend der Angabe für op.

          Die Vergleichsoperatoren erwartet test als eigenständige Argu-
          mente. Deshalb müssen sie zwischen zwei Leerzeichen stehen.

          op kann sein:

          -eq  (eq - equal) Wahr, wenn die beiden Zahlen gleich sind.

          -ne  (ne - not equal) Wahr, wenn die beiden Zahlen ungleich sind.

          -ge  (ge - greater than or equal) Wahr, wenn zahl1 größer oder
               gleich zahl2 ist.

          -gt  (gt - greater than) Wahr, wenn zahl1 größer ist als zahl2.

          -le  (le - less than or equal) Wahr, wenn zahl1 kleiner oder
               gleich zahl2 ist.

          -lt  (lt - less than) Wahr, wenn zahl1 kleiner ist als zahl2.









Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

test(1)                                                             test(1)

   Bedingungen verneinen

     ! bedingung
          Wahr, wenn die angegebene Bedingung nicht erfüllt ist. Nach dem
          Ausrufezeichen muß ein Leerzeichen stehen.

          Beispiel:

          $ ! -r datei

          Wenn Sie die angegebene Datei nicht lesen dürfen, liefert test
          als Endestatus den Wert 0 (wahr) zurück.

   Bedingungen verknüpfen

     Mehrere Bedingungen können Sie miteinander zu einem Ausdruck verknüp-
     fen. Die Bedingung selbst kann auch verneint sein.

     Die entsprechenden Verknüpfungsoperatoren erwartet test als eigenstän-
     dige Argumente. Deshalb müssen sie zwischen zwei Leerzeichen stehen.

     Das Kommando find durchsucht Verzeichnisse nach Dateien, die vorgege-
     bene Bedingungen erfüllen. Diese Bedingungen werden ähnlich verknüpft
     wie bei test.

     Bedingungen können Sie wie folgt miteinander verknüpfen:

     bedingung -a bedingung
          (a - and) Wahr, wenn jede der so aneinandergereihten Bedingungen
          erfüllt ist, also logisches UND. Vor und nach dem Operator -a muß
          jeweils ein Leerzeichen stehen.

     bedingung -o bedingung
          (o - or) Wahr, wenn mindestens eine der Bedingungen erfüllt ist,
          also logisches ODER. Vor und nach dem Operator -o muß jeweils ein
          Leerzeichen stehen.

     \( ausdruck \)
          ausdruck steht hier für zwei oder mehr Bedingungen, die beliebig
          miteinander verknüpft sind. Die runden Klammern fassen diese
          Bedingungen so zusammen, daß eine vor der Klammer angegebene Ver-
          knüpfung sich auf den Klammer-Inhalt und nicht nur auf die direkt
          nachfolgende Bedingung bezieht.

          Da die runden Klammern für die Shell eine Sonderbedeutung haben,
          müssen sie mit \ entwertet werden. Vor und nach ausdruck muß
          jeweils ein Leerzeichen stehen.







Seite 6                      Reliant UNIX 5.44               Gedruckt 11/98

test(1)                                                             test(1)

          Beispiel:

          $ ! \( -r datei -o -w datei \)
                           |
                          ODER

          Der Ausdruck in den runden Klammern ist wahr, wenn Sie für die
          angegebene Datei Lese- oder Schreibrecht haben. Das Ausrufezei-
          chen verneint den Klammerinhalt. Deshalb liefert test als Ende-
          status den Wert 0 (wahr) zurück, wenn Sie für die angegebene
          Datei weder Lese- noch Schreibrecht haben.

   Priorität der Verknüpfungen

     Die Verknüpfungen haben für test folgende Priorität:

     Klammern vor Verneinung vor UND vor ODER.

     Im vorigen Beispiel wird also zuerst der Inhalt der Klammern ausgewer-
     tet und anschließend verneint.

ENDESTATUS
     0   Der angegebene Ausdruck ist wahr.

     1   Der angegebene Ausdruck ist falsch oder Sie haben eine Bedingung
         nicht vollständig angegeben oder Sie haben überhaupt keine Bedin-
         gung angegeben.

     >1  Fehler.

FEHLERMELDUNG
     test: argument expected

     Diese Fehlermeldung erhalten Sie, wenn Sie eine Bedingung unvollstän-
     dig angegeben haben, wenn also eine Datei bzw. eine Zeichenkette bzw.
     eine Zahl in der Angabe fehlen.

     Schließen Sie deshalb die Shell-Parameter immer in Anführungszeichen
     ein. Andernfalls fehlt ein Argument, wenn die entsprechende Shell-
     Variable nicht definiert ist.














Seite 7                      Reliant UNIX 5.44               Gedruckt 11/98

test(1)                                                             test(1)

BEISPIELE
     Beispiel 1:

     Die folgende Shell-Prozedur prüft, ob der angegebene Stellungsparame-
     ter der Name einer Datei oder eines Verzeichnisses ist.

     if test -f "$1"                 # oder: if [ -f "$1" ]
        then
        echo $1 ist eine Datei
        elif test -d "$1"            # oder: elif [ -d "$1" ]
           then
           echo $1 ist ein Verzeichnis
     fi

     Der Stellungsparameter $1 ist in Anführungszeichen eingeschlossen.
     Deshalb setzt test dafür das aktuelle Verzeichnis ein, falls Sie beim
     Aufruf der Shell-Prozedur kein weiteres Argument angeben.

     Ohne Anführungszeichen würde test in diesem Fall mit einer Fehlermel-
     dung abbrechen.

     Beispiel 2:

     Die folgende Prozedur prüft mit dem Operator -gt, ob die beim Aufruf
     zuerst angegebene Datei, also $1, mehr Zeilen enthält als die danach
     angegebene Datei, also $2:

     if [ `wc -l "$1"` -gt `wc -l "$2"` ]
          then echo $1 enthaelt mehr Zeilen als $2
     fi

     Das Kommando wc -l zählt die Zeilen der beiden Dateien und gibt die
     jeweiligen Zeilenzahlen aus. Die Shell ersetzt die Angabe in den
     Gegenhochkommas durch entsprechende Zeilenzahl.

     Beispiel 3:

     Es soll festgestellt werden, ob der Shell-Variablen TAPE ein Wert
     zugewiesen ist. Dazu gibt es mehrere Möglichkeiten:

     Möglichkeit A

     if [ ! -z "$TAPE" ]
         then echo Der Variablen TAPE ist ein Wert zugewiesen
         else ....
     fi








Seite 8                      Reliant UNIX 5.44               Gedruckt 11/98

test(1)                                                             test(1)

     Möglichkeit B

     if [ -n "$TAPE" ]
         then echo Der Variablen TAPE ist ein Wert zugewiesen
         else ....
     fi

     Die Angabe -n kann auch entfallen.

     Der Shell-Parameter $TAPE steht in Anführungszeichen, damit test keine
     Fehlermeldung ausgibt, falls der Variablen kein Wert zugewiesen ist.

HINWEISE
     test existiert sowohl als externes Kommando (/usr/bin/test) als auch
     als eingebautes Shell-Kommando (Built-in), und zwar sowohl der Korn-
     Shell ksh(1) wie auch der Bourne-Shell sh(1). Für die Ausführung von
     /usr/bin/test erzeugt die Shell einen neuen Prozeß.

     Bei der Verwendung von test können sich Abweichungen im Verhalten
     ergeben, je nachdem, welche Shell benutzt wird. Die möglichen Abwei-
     chungen sind nicht eigens beschrieben.

SIEHE AUCH
     find(1), ksh(1), sh(1).






























Seite 9                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026