Bedingte Anweisungen werden bei der Shell-Programmierung verwendet. Sie liefern einen Status zurück, der idR zur Steuerung des Scripts verwendet wird.
Die erste Zeile im Script legt den Commandinterpreter (Shell) fest. Achtung: #! in Spalte 1 ist hierbei zwingend und kein Kommentar
  • #!/bin/sh
    Bourne SHell
  • /bin/ksh
    Korn SHell
  • #!/bin/bash
    Bourne Again SHell. Systenscripts in /etc/init.d verwenden #!/bin/bash

Ausdruck testen

test ausdruck               	(alte Form)
[ ausdruck ]             	(neue Form   System V)
[[ ausdruck ]]		(neue Form   ksh , bash)

Das Kommando  test  wird verwendet, um einen Ausdruck zu testen.
Es liefert als Ergebnis einen Status zurück :
für TRUE eine 0
für FALSE einen Wert ungleich 0
Wird test ohne Argument aufgerufen, so wird FALSE zurückgeliefert.

Logische Operatoren
! ausdruck        	Negiert das Ergebnis von ausdruck

ausdr -a ausdr    	verbindet die Ergebnisse von ausdr mit logisch AND

ausdr -o ausdr    	verbindet die Ergebnisse von ausdr mit logisch OR
(AND wird vor OR verknüpft)

Es dürfen Klammern gesetzt werden. Dabei ist zu beachten, daß Klammern für die Shell eine Bedeutung haben, d.h sie sind evtl  durch einen Backslash zu  quoten      \( expr \).


Für den Vergleich von numerischen Werten sollten immer die entsprechenden Options verwendet werden und nicht < <= = != >= > da f�hrende Nullen das Ergebnis verf�lschen k�nnten.

Bourne-Shell     neue Form ab System V

[ ausdruck ]     kann statt  test ausdruck  verwendet werden.


Achtung :  die Klammern [ ]  müssen in Blanks eingeschlossen sein.


Die ksh und die bash  verwenden  [[ ausdruck ]]  für den test


i=003

j=3

[[ $j != $i ]] && print    $j ungleich    $i

[[ j -eq i ]]


if

if kommandofolge_1
then kommandofolge_2
[ elif kommandofolge_3  ]
[ else kommandofolge_4  ]
fi

Im Gegensatz zu Programmiersprachen kann hier eine Kommandofolge als Bedingung
verwendet werden.  Sie gilt als erfüllt, wenn sie  0  als Ergebnis zurückliefert.
Natürlich wird häufig auch hier nur eine Bedingung formuliert werden, da sonst
der Exit-Status der letzten Anweisung den Ausschlag gibt.

#typeset -u antw    (geht nur in ksh nicht in bash, wandelt Eingabe in uppercase)
read antw?"Datei löschen (J/ ) ? "
    if [ $antw = "J" -o $antw = "j" ]
    then
    if [ ! -r $fln ]
    then
    echo "Datei $fln  fehlt"
    else
        rm  $fln
        fi
        fi
        
        
        Beispiel 2 :
        
        #! /bin/ksh
    #
    if [ $# -eq 0 ]
        then
        echo  "Aufruf : "
        echo  " copy  source   dest "
        read  src?"Bitte Sourcedatei eingeben "
        read  dest?"Bitte Zieldatei eingeben "
        elif [ $# -eq 1 ]
            then
            read  dest?"Bitte Zieldatei eingeben  "
            src=$1            # Parameter umspeichern
            elif test $# -eq 2
            then
            src=$1            # Parameter umspeichern
            dest=$2
            else
                echo "Zuviel Parameter"
            exit 1            # Abbruch mit Fehlerexit
            fi
            cp $src $dest
            exit 0                 # success
      
Eine einfache IF-Konstruktion kann mit Hilfe der Zeichen && oder || kürzer dargestellt werden. kommandoliste_1 && kommandoliste_2 Bei && wird kommandoliste_2 nur ausgeführt, wenn kommandoliste_1 einen Status 0 d.h. TRUE zurückgeliefert hat.
    
            #typeset -u  antw
            read antw& "Datei löschen (J/ ) ? "
            [[ $antw = "J" ]] && rm "$fln"
        
Anderer Anwendungsfall, Umwandlung mit nachgeschaltetem Link. Bei || wird kommandoliste_2 nur ausgeführt, wenn kommandoliste_1 einen Status ungleich 0 d.h. FALSE zurückgeliefert hat. troff -ms text 2>fehler || rm text.out* Die Datei Text soll mit dem Formatierer troff und dem Macro ms formatiert werden. Dabei werden die Dateien text.out und text.out_ erzeugt. Wenn bei der Formatierung ein Fehler auftritt, so sollen diese beiden Dateien gelöscht werden.