Springe zum Hauptinhalt

Bourne
next up previous contents
Next: for-Kommando Up: Ablaufsteuerung Previous: if-Kommando

test-Kommando

Mit dem Kommando test kann der Exit-Status in Abhängigkeit vom Wahrheitswert eines Ausdruckes gezielt gesetzt werden.


Beispiel:

$ test -f sort.c      # Exit-Status gleich 0, falls File sort.c existiert
Alternative Syntax:
$ [ -f sort.c ]       # Exit-Status gleich 0, falls File sort.c existiert
Das Kommando test erlaubt neben der Untersuchung von Files und Filetypen außerdem numerische Tests und Zeichenkettenvergleiche:
  • numerische Vergleiche
    • allgemeine Form:


      [ N operator M ]


      Wobei N und M für numerische Werte stehen, möglicherweise durch Shell-Variablen repräsentiert und operator für eine der folgenden Möglichkeiten steht:


      -eq Gleichheit von N und M
      -ne Ungleichheit von N und M
      -gt N ist größer als M
      -lt N ist kleiner als M
      -ge N ist größer oder gleich M
      -le N ist kleiner oder gleich M


    • Beispiele:

      #!/bin/sh
      #
      # Pruefen, ob mehr als <anzahl> Nutzer zum
      # Zeitpunkt des Aufrufs angemeldet sind
      #
      # Aufruf:  $0  <anzahl>
      #
      nutzer=`who | wc -l`
      if [ $# -eq 0 ]
      then   echo "Aufruf: $0 anzahl"
      elif [ $nutzer -gt $1 ]
      then echo "Mehr als $1 Nutzer angemeldet"
      fi
       
      
      
      #
      # Varianten der Wertezuweisung an Variable
      #
      
      nummer=1
      number=0001
      numero=' 1'
      


      Bei einem numerischen Test auf Gleichheit zwischen diesen Variablenwerten wird immer der Exit-Status 0 (d.h. Gleichheit) geliefert.

  • Zeichenkettenvergleiche
    • allgemeine Formen


      [ zk1 = zk2 ] $\char93 $ Test auf Gleichheit


      [ zk1 != zk2 ] $\char93 $ Test auf Ungleichheit


      Beispiele:

      [ $nummer = $number ]      # Exit-Status ungleich 0!
      
      [ $nummer = $numero ]      # Exit-Status gleich 0 (!!) da durch
                                 # test fuehrende Leerzeichen verloren gehen
      aber:
      
      [ "$nummer" = "$numero" ]  # Exit-Status ungleich 0
      
  • Existenz einer Zeichenkette


    • allgemeine Formen:


      [ -z zeichenkette ] $\char93 $ Test auf Länge 0 (leere Zeichenkette)


      [ -n zeichenkette ] $\char93 $ Test auf Länge ungleich 0, d.h. Existenz


    • Beispiel:
      #!/bin/sh
      #
      # Aufruf: $0 <filename}>
      #
      if [ -z "$1" ]
      then echo "Aufruf: $0 filename"
      else
          ...
      fi
      
    • Bemerkung:
      if [ -z $1 ]
      
      führt bei fehlendem Argument zu Fehlernachricht:

      cmd_name: argument expected


  • Untersuchung von Files


    • allgemeine Form:


      [ operator filename ]


      wobei operator steht für:


      -s File existiert und ist nicht leer
      -f File ist normales File, kein Verzeichnis
      -d File ist ein Verzeichnis
      -w für das File besteht Schreiberlaubnis
      -r für das File besteht Leseerlaubnis
      -x File ist ausführbar


    • Beispiel:
      #!/bin/sh
      #
      # Loeschen eines Files bzw.
      # eines leeren Verzeichnisses
      #
      # Aufruf  remove <filename>
      #
      
      if [ -d $1 ]
      then rmdir $1
      elif [ -f $1 ]
      then rm $1
      fi
      
      
    • Bemerkung:

      Die erläuterten Ausdrücke können darüber hinaus folgendermaßen zu komplexen Ausdrücken kombiniert werden:


      [ !ausdruck ] $\char93 $ Negation von ausdruck


      [ ausdruck1 -a ausdruck2 ] $\char93 $ logisches ,,UND``


      [ ausdruck1 -o ausdruck2 ] $\char93 $ logisches ,,ODER``


next up previous contents
Next: for-Kommando Up: Ablaufsteuerung Previous: if-Kommando