# Verzweigungen if und case

Mit `if`-Anweisungen steuert man in Abhängigkeit eines Ausdruckes den Programmablauf:

`if <Bedingung>; then <Kommando(s)> [elif <Bedingung>; then] <Kommando(s)> [else] <Kommando(s)> fi`

Beispiel:

`#!/bin/sh if test $# -ne 2; then echo "Das Kommando benoetigt zwei Argumente!" exit 1 else echo "Parameter 1: $1, Parameter 2: $2" fi`

if-Verzweigungen können verschachtelt werden:

`if [ $# -gt 2 ]; then # Zeile 1 # tue irgendwas else if test $# -ne 2; then # Zeile 4 # tue etwas anderes fi fi`

Die Tests in Zeile 1 und 4 sind semantisch äquivalent, sieht man einmal davon ab, dass im ersten Test überprüft wird, ob die Anzahl der Parameter größer 2 ist und im zweiten auf "ungleich 2" getestet wird.

Um große Verschachtelungstiefen bei `if`-Konstrukten zu vermeiden, kann die `case`-Anweisung verwendet werden:

`case "Variable" in <Muster1> ) <Kommando(s)> ;; <Muster2> ) <Kommando(s)> ;; <Muster3> ) <Kommando(s)> ;; esac`

Beispiel:

`#!/bin/sh option= daten= for i do # Erklärung im nächsten Abschnitt case "$i" in -* ) option="$option $i";; * ) daten="$daten $i";; esac done echo "Optionen: $option" echo "Daten: $daten"`

`case` arbeitet mit Mustervergleich von Zeichenketten, deshalb wird der Vergleichsausdruck in Doppelanführungszeichen gesetzt (`"$i"`). Mit welchem Muster der Ausdruck zu vergleichen ist, steht vor einer schließenden runden Klammer; `-*` bedeutet also: Die Muster stimmen überein, sobald der Vergleichsausdruck mit einem Minus beginnt. Die Anweisungen ab dem ersten zutreffenden Vergleich werden abgearbeitet bis zu einem expliziten Abbruch (zwei Semikola in Folge `;;`) oder bis zum Ende der `case`-Anweisung.