Unterabschnitte


Fallunterscheidungen

Für die bedingte Ausführung von Teilen eines Skripts kann man zwischen if und case wählen. Ein if verwendet den Rückgabewert (exit-Status) eines Ausdrucks als Bedingung, während case einen String nacheinander gegen mehrere Muster prüft, und beim ersten Treffer den entsprechenden Zweig ausführt.


if

Mit if kann man einen Teil eines Skripts in Abhängigkeit einer Bedingung ausführen lassen. Die Angabe mehrerer Alternativen mit elif und maximal ein else ist möglich. Die if-Anweisung wird mit einem fi beendet.

Die Struktur kann also etwas variieren. Die einfachste Form sieht so aus:
if Bedingung
then
kommando1
kommando2
...
fi

In voller Schönheit hat die Fallunterscheidung diese Form:
if EineBedingung
then
kommando1
kommando2
...
elif NochEineBedingung
then
nocheinkommando1
nocheinkommando2
...
...
else
undnocheinkommando1
undnocheinkommando2
...
fi

Als Bedingung wird häufig test beziehungsweise [ ... ] verwendet, siehe test-Ausdrücke, true, false.

Beispiel 20   Kompilieren eines Programms mit Erfolgsmeldung:
if gcc meinprg.c -o meinprg
then
   echo "hat geklappt!"
else
   echo "Schade!"
fi


case

Mit der case-Anweisung kann man einen String Ausdruck gegen mehrere Muster testen lassen. Die Kommandos, die zum ersten passenden Muster gehören, werden dann ausgeführt:
case Ausdruck in
muster1) Kommando1
...
;;
muster2) AnderesKommando1
...
;;
...
esac

Jeder Block, der zu einem Muster gehört, muß mit doppelten Semikolon ;; abgeschlossen werden.

Als Muster kann man beliebige Strings verwenden, wobei * auf beliebige Zeichen (auch auf keines) zutrifft, ? auf genau ein Zeichen, und mehrere Muster mit einem | (für logisches ODER) zusammengefaßt werden können.

Beispiel 21   Für alle Dateien im aktuellen Verzeichnis wird versucht, den Dateityp zu erraten:
for f in *
do
     case $f in
         *.c|*.cpp|*.h)
                  echo $f ist ein Quelltext.
                  ;;
         *.txt)
                  echo $f ist eine Textdatei.
                  ;;
         *)       echo $f hat einen unbekannten Dateityp"
                  ;;
     esac
done

AnyWare@Wachtler.de