If

Aus Xinux Wiki
Version vom 17. Oktober 2025, 15:20 Uhr von Thomas.will (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „= if-Verzweigungen = *Die if-Struktur ist die zentrale Möglichkeit, in Bash bedingte Abläufe zu steuern.* *Sie ermöglicht es, Befehle nur dann auszuführ…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

if-Verzweigungen

  • Die if-Struktur ist die zentrale Möglichkeit, in Bash bedingte Abläufe zu steuern.*
  • Sie ermöglicht es, Befehle nur dann auszuführen, wenn eine bestimmte Bedingung erfüllt ist.*

Grundprinzip

  • Die Bash prüft den **Exit-Status** eines Kommandos oder Tests:
 0 bedeutet **wahr**, jeder andere Wert bedeutet **falsch**.  
  • Entsprechend werden die zugehörigen Befehle im then- oder else-Zweig ausgeführt.*

Syntax

if [ Bedingung ]; then
  Befehle bei wahr
else
  Befehle bei falsch
fi
Erweiterte Form mit elif
if [ Bedingung1 ]; then
  Befehle bei wahr
elif [ Bedingung2 ]; then
  Befehle bei zweiter Bedingung
else
  Befehle bei sonst
fi

Beispiele

Einfaches Beispiel
if [ -f /etc/passwd ]; then
  echo "Datei existiert"
else
  echo "Datei nicht gefunden"
fi
Ausgabe:  
 Datei existiert  
Beispiel mit Benutzerabfrage
NAME=$USER
if [ "$NAME" = "root" ]; then
  echo "Administrator erkannt"
else
  echo "Normaler Benutzer"
fi
Ausgabe:  
 Normaler Benutzer  
Beispiel mit elif
echo "Bitte Zahl eingeben:"
read ZAHL
if [ "$ZAHL" -lt 0 ]; then
  echo "Negativ"
elif [ "$ZAHL" -eq 0 ]; then
  echo "Null"
else
  echo "Positiv"
fi

Überprüfung des Rückgabewerts

  • Der letzte ausgeführte Test oder Befehl liefert einen Rückgabewert, der mit echo $? angezeigt werden kann.*
  • Ein Exit-Status von 0 bedeutet „Bedingung erfüllt“, ein anderer Wert „Bedingung nicht erfüllt“.*
Beispiel
[ -d /etc ]  
echo $?  
0
[ -d /nichtda ]  
echo $?  
1

Hinweise

  • Die Klammern [ ] sind ein Synonym für den Befehl test.
  • Leerzeichen zwischen den eckigen Klammern und der Bedingung sind Pflicht.
  • Es dürfen einfache oder doppelte Anführungszeichen verwendet werden, um Leerzeichen oder Sonderzeichen zu schützen.
  • Für numerische Vergleiche werden Operatoren wie -eq, -lt, -gt usw. verwendet.
  • Für Stringvergleiche werden = und != genutzt.

Erweiterte Syntax mit ...

  • Die doppelten Klammern ... sind eine modernere Variante mit erweiterten Vergleichsmöglichkeiten.*
  • Sie unterstützen z. B. Mustervergleiche (Globbing) und logische Operatoren ohne Maskierung.*
Beispiel
NAME="Thomas"
if $NAME == Th* ; then
  echo "Name beginnt mit Th"
fi

Typische Fehlerquellen

  • Fehlende Leerzeichen nach [ oder vor ].
  • Unbeabsichtigte Auswertung leerer Variablen → in Anführungszeichen setzen!
  • Falsche Vergleichsoperatoren (z. B. = statt -eq bei Zahlen).

Aufgaben

  • Erstellen Sie ein Skript, das prüft, ob eine Datei /etc/passwd existiert, und eine passende Meldung ausgibt.*
  • Erstellen Sie ein Skript, das prüft, ob eine Variable NAME den Wert „root“ enthält, und entsprechende Ausgaben erzeugt.*
  • Erweitern Sie die Abfrage mit elif, sodass drei Zustände unterschieden werden (z. B. positiv, null, negativ).*
  • Geben Sie bei jeder Bedingung den Rückgabewert mit echo $? aus.*
  • Testen Sie die Unterschiede zwischen [ ... ] und ... .*