If: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 5: Zeile 5:
  
 
== Grundprinzip ==
 
== Grundprinzip ==
*Die Bash prüft den **Exit-Status** eines Kommandos oder Tests:
+
*Die Bash prüft den '''Exit-Status''' eines Kommandos oder Tests:
   0 bedeutet **wahr**, jeder andere Wert bedeutet **falsch**.
+
   0 bedeutet '''wahr''', jeder andere Wert bedeutet '''falsch'''.
 
*Entsprechend werden die zugehörigen Befehle im then- oder else-Zweig ausgeführt.
 
*Entsprechend werden die zugehörigen Befehle im then- oder else-Zweig ausgeführt.
  

Version vom 24. November 2025, 17:48 Uhr

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
fi
if mit else
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 ohne else
if [ -f /etc/passwd ]; then
  echo "Datei existiert"
fi
Ausgabe:
 Datei existiert
Einfaches Beispiel mit else
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 [[ ... ]].