Lehrer Nussbaumer - Linux bash-Programmierung

Grundlagen

Datenstrukturen

Programmstrukturen 

  1. Verzweigung
  2. Mehrfach- Verzweigung
  3. Schleifen
  4. Auswahlmenü
  5. Funktionen

Beispiele


-----------------
letzte Änderung:
09 December 2021
-----------------
Lehrer Nussbaumers Seite

... in Arbeit ...

Verzweigung

Verzweigungen realisieren so genannte "Programmentscheidungen" und ermöglichen auf diese Weise ausgefeilte Algorithmen.

if

Die if - Verzweigung ist in der bash allgemein so aufgebaut:

if Bedingung; then
  ... Anweisungen ...
fi

Im Beispiel wird auf Gleichheit des Wertes des Eingabeparameters getestet:

#!/bin/sh
if [ $1 = "Raucher" ]; then
  echo "$1? - Rauchen ist ungesund!"
fi

Damit erhalten wir z.B. die folgende Ausgabe:

alfred@newbie:~/bash/beispiele > frage1 Raucher
Raucher? - Rauchen ist ungesund!

Um auch den Fall zu berücksichtigen, wenn die Bedingung nicht erfüllt wird, verwendet man den so genannten "else" - Zweig:

#!/bin/sh
if [ $1 = "Raucher" ]; then
  echo "$1? - Rauchen ist ungesund!"
else
  echo "$1? - Gesunde Lebensweise!"
fi

Im Beispiel erhalten wir somit:

alfred@newbie:~/bash/beispiele > frage2 Nichtraucher
Nichtraucher? - Gesunde Lebensweise!

Die Bedingung kann auch einen Programmaufruf enthalten: Kann ein Programm ordnungsgemäß beendet werden, liefert es den Rückgabewert "0", die bash ordnet diesem Wert den Boole'schen Wert "wahr" zu. Im Fehlerfall liefert das Programm "1", was die bash als "falsch" auswertet.

Im Beispiel testen wir auf das Vorhandensein einer bestimmten Datei:

#!/bin/sh
if ls | grep 'frage3' ; then
  echo "Datei gefunden"
fi

Der Aufruf dieses Skripts liefert (natürlich) dieses Ergebnis:

alfred@newbie:~/bash/beispiele > frage3
frage3
Datei gefunden

Bemerkung:if - Verzweigungen können auch geschachtelt werden:

#!/bin/sh
if [ $1 = "Raucher" ]; then
  if [ $2 = "selten" ]; then
    echo "$1, $2? - Seltenes Rauchen ist auch ungesund!"
  fi
  if [ $2 = "oft" ]; then
    echo "$1, $2? - Häufiges Rauchen führt zum Lungenkrebs!"
  fi
fi

elif

Im nächsten Beispiel fügen wir einfach mehrere if-Abfragen aneinander:

#!/bin/sh
if [ $1 = "Raucher" ]; then
  echo "$1? - Rauchen ist ungesund!"
elif [ $1 = "Raucherin" ]; then
  echo "$1? - Rauchen ist ungesund!"
elif [ $1 = "Sportlerin" ]; then
  echo "$1? - Bewegung ist gesund!"
elif [ $1 = "Sportler" ]; then
  echo "$1? - Bewegung ist gesund!"
fi

Dies hätten wir auch so lösen können:

#!/bin/sh
if [ $1 = "Raucher" -o $1 = "Raucherin" ]; then
  echo "$1? - Rauchen ist ungesund!"
elif [ $1 = "Sportlerin" -o $1 = "Sportler" ]; then
  echo "$1? - Bewegung ist gesund!"
fi

Im letzten Beispiel wurden jeweils zwei Bedingungen zusammengefasst. Dies wird mit Hilfe des Programmes "test" realisiert (vgl. nächsten Abschnitt).

test

Die eckigen Klammern "[ ... Bedingung ... ]" in den obigen Beispielen rufen das Programm "test" auf. Wir verwenden "test" zunächst auf der Kommandozeile:

alfred@newbie:~/bash/beispiele > test -f frage6; echo $?
0

Die Datei "frage6" ist im aktuellen Verzeichnis offensichtlich enthalten.

alfred@newbie:~/bash/beispiele > test -f fragezeichen; echo $?
1

Die Datei "fragezeichen" ist im aktuellen Verzeichnis offensichtlich nicht enthalten.

Im letzten Beispiel testen wir auf Gleichheit zweier Zahlen:

alfred@newbie:~/bash/beispiele > test 1 -eq 2; echo $?
1

Das Programm "test" wird normalerweise innerhalb der if-Bedingung in bash-Skripts eingesetzt. Die folgende Tabelle gibt einen Überblick über mögliche Ausdrücke:

Parameter Ergebnis
!Bedingung wahr, wenn die Bedingung nicht erfüllt ist
Bedingung1 -o Bedingung2 wahr, wenn Bedingung1 oder Bedingung2 erfüllt ist
Bedingung1 -a Bedingung2 wahr, wenn Bedingung1 und Bedingung2 erfüllt sind
string1 = string2 wahr, wenn beide Zeichenketten gleich sind
string1 == string2 wahr, wenn beide Zeichenketten gleich sind
string1 != string2 wahr, wenn beide Zeichenketten ungleich sind
string wahr, wenn die angegebene Zeichenkette mehr als 0 Zeichen hat
string1 < string2 wahr, wenn string1 in der alphabetischen Ordnung vor string2 kommt
string1 > string2 wahr, wenn string1 in der alphabetischen Ordnung nach string2 kommt
zahl1 -eq zahl2 wahr, wenn beide Zahlen gleich sind
zahl1 -ne zahl2 wahr, wenn die beiden Zahlen ungleich sind
zahl1 -lt zahl2 wahr, wenn zahl1 kleiner als zahl2 ist
zahl1 -le zahl2 wahr, wenn zahl1 kleiner oder gleich zahl2 ist
zahl1 -gt zahl2 wahr, wenn zahl1 größer als zahl2 ist
zahl1 -ge zahl2 wahr, wenn zahl1 größer oder gleich zahl2 ist ("greater than or equal")
-e file wahr, wenn die Datei file im aktuellen Verzeichnis existiert ("exists")
-r file wahr, wenn die Datei file im aktuellen Verzeichnis exisitert und lesbar ist ("readable")
-w file wahr, wenn die Datei file im aktuellen Verzeichnis existiert und beschrieben werden kann ("writeable")
-x file wahr, wenn die Datei file im aktuellen Verzeichnis existiert und ausführbar ist ("executable")
-s file wahr, wenn die Datei file länger als null Bytes ist
-O file wahr, wenn die Datei existiert und dem aktuellen Benutzer ("Owner") gehört
-G file wahr, wenn die Datei exisitert und der Gruppe gehört, der der aktuelle Benutzer angehört ("Group")
-f file wahr, wenn die Datei existiert und eine Datei ist ("file")
-d file wahr, wenn die Datei existiert und ein Verzeichnis ist ("directory")
-L file wahr, wenn die Datei exisitert und ein symbolischer Link ist ("symLink")
-S file wahr, wenn die Datei existiert und ein Socket ist
file1 -ef file2 wahr, wenn beide Dateien die gleichen sind
file1 -ot file2 wahr, wenn file1 älter als file2 ist ("older than")
file1 -nt file2 wahr, wenn file1 neuer als file2 ist ("newer than")

© Alfred Nussbaumer, Weblog "MiniNuss"