Kontrollstrukturen für die Programmablauf-Steuerung

Die Bash kennt zahlreiche Kontrollstrukturen zur Programmablauf-Steuerung. Verschiedene Verzweigungen und Schleifen sind wie bei einer "echten" Programmiersprache auch in der Shell möglich. So lassen sich Skripte ereignisorientiert steuern.

Der test Befehl

Mit dem test Befehl können Variablen, Zeichenketten, Zahlen aber auch Dateien auf Bedingungen überprüft werden. Dafür kennt der test Befehl zahlreiche Optionen. Die unterschiedlichen Optionen geben auch die jeweilige Syntax des test Befehls vor.

test Optionen

In der Bash ist es üblich, den test Befehl mit eckigen Klammern [ ] abzukürzen.

[ Optionen ]

Wichtig! Beim test Befehl muss auf die korrekte Verwendung der Leerzeichen geachtet werden! Sonst sind Fehlfunktionen vorprogrammiert.

Optionen für Dateien

  • -e Datei : Überprüft, ob eine Datei existiert
test -e datei.txt		# Überprüft, ob die Datei vorhanden ist.
[ -e datei.txt ]		# Überprüft, ob die Datei vorhanden ist.

Optionen für Strings

  • String1 = String2 : Überprüft, ob zwei Zeichenketten identisch sind

Optionen für Integervariablen

  • Zahl1 -eq Zahl2 : Überprüft, ob zwei Zahlen gleich sind
  • Zahl1 -gt Zahl2 : Überprüft, ob die Zahl1 größer als die Zahl2 ist
  • Zahl1 -ge Zahl2 : Überprüft, ob die Zahl1 größer oder gleich die Zahl2 ist
  • Zahl1 -lt Zahl2 : Überprüft, ob die Zahl1 kleiner als die Zahl2 ist
  • Zahl1 -le Zahl2 : Überprüft, ob die Zahl1 kleiner oder gleich die Zahl2 ist

Logische Operationen

  • Bedingung1 -o Bedingung2 : ODER-Verknüpfung zweier Bedingungen
  • Bedingung1 -a Bedingung2 : UND-Verknüpfung zweier Bedingungen
  • ! Bedingung : Negierung einer Bedingung

Verzweigungen mit if

Mit der if Verzweigung kann man den Ablauf von Bash-Skripten steuern.

Wenn die Prüfung nach dem if-Befehl ein wahres Ergebnis liefert, werden alle Befehle, die zwischen then und fi stehen, ausgeführt. fi (if rückwärts geschrieben) schließt die if-Schleife ab.

Die if Verzweigung kann mit else erweitert werden. In diesem Fall werden alle Befehle zwischen then und else ausgeführt, wenn die Prüfung ein wahres Ergebnis liefert. Andernfalls werden alle Befehle zwischen else und fi ausgeführt.

Syntax des if-Befehls (3 Varianten):

if Prüfung      
then
Befehle
fi
if Prüfung      
then
Befehle
else
Befehle
fi
if Prüfung
then
Befehle
elif
then
Befehle
else
Befehle
fi

Schleifen

Soll ein Teil eines Skriptes mehrmals durchlaufen werden, kann dies in der Shell durch eine Schleife gelöst werden. Die Shell kennt mehrere Schleifentypen.

Zählschleifen mit for

Eine Zählschleife wird in der Bash mit dem Befehl for eingeleitet. Nach for folgen die Bedingungen für die Wiederholung der Schleife. Die Befehle, die ausgeführt werden sollen stehen zwischen do und done.

Syntax des for-Befehls:

for (( Variable=Startwert ; Bedingung ; Zähloperation ))
do
Befehle
done

Die Zählvariable muss zuerst mit einem Startwert belegt werden. Danach wird geprüft, ob die Variable der Bedingung genügt. Falls ja wird die Schleife durchlaufen. Am Ende der Schleife wird die Zähloperation ausgeführt. Dann wird wieder geprüft, ob die Bedingung wahr ist u.s.w. Die Schleife wird beendet sobald die Prüfung der Bedingung ein falsches Ergebnis liefert.

Beispiele für Zähloperationen:

Variable um 1 erhöhen    Variable++ oder Variable=Variable+1
Variable um 1 erniedrigen    Variable-- oder Variable=Variable-1
Variable um 5 erhöhen    Variable=Variable+5

Beispiel für eine Zählschleife:

for (( a=2 ; a<10 ; a=a+2 ))
do
  echo $a 	# gibt die Zahlen 2, 4, 6, 8 zeilenweise aus
done

Schleifen mit while

Die while Schleife führt eine Befehlsfolge wiederholt aus, solange die Prüfbedingung wahr ist. Die Befehle, die ausgeführt werden sollen, stehen zwischen do und done.

Syntax einer while Schleife:

while [ Prüfbedingung ]
do
Befehle
done

Beispiel für eine while Schleife:

a=2
while [ $a -lt 10 ]
do
  echo $a 	# gibt die Zahlen 2, 4, 6, 8 zeilenweise aus
  let a=$a+2
done