Einfache Verzweigungen: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „= Verzweigungen = == Kurzlogische Verzweigungen (&& und ||) == *Kurzlogische Verzweigungen nutzen den Rückgabewert (Exit-Status) eines Befehls, um Folgeakti…“)
 
Zeile 1: Zeile 1:
= Verzweigungen =
+
= Kurzlogische Verzweigungen (&& und ||) =
  
== Kurzlogische Verzweigungen (&& und ||) ==
+
*Kurzlogische Verzweigungen nutzen den Rückgabewert (Exit-Status) eines Befehls, um Folgeaktionen in einer Zeile auszuführen.* 
 +
*Dadurch können einfache Prüfungen kompakt formuliert werden, ohne die if-Struktur zu verwenden.*
  
*Kurzlogische Verzweigungen nutzen den Rückgabewert (Exit-Status) eines Befehls, um Folgeaktionen direkt in einer Zeile auszuführen.*  
+
== Grundprinzip ==
*Dadurch können einfache Prüfungen und Reaktionen kompakt geschrieben werden, ohne die if-Struktur zu verwenden.*  
+
* '''&&''' (UND): führt den nächsten Befehl **nur** aus, wenn der vorherige erfolgreich war (Exit-Status 0).   
 +
* '''||''' (ODER): führt den nächsten Befehl **nur** aus, wenn der vorherige **nicht** erfolgreich war (Exit-Status ≠ 0).   
  
;Grundprinzip
+
== Beispiele ==
* '''&&''' (UND): führt den folgenden Befehl nur aus, wenn der vorherige erfolgreich war (Exit-Status 0). 
 
* '''||''' (ODER): führt den folgenden Befehl nur aus, wenn der vorherige nicht erfolgreich war (Exit-Status ≠ 0). 
 
 
 
;Beispiele
 
 
* [ -f /etc/passwd ] && echo "Datei existiert"   
 
* [ -f /etc/passwd ] && echo "Datei existiert"   
 
   Datei existiert   
 
   Datei existiert   
Zeile 18: Zeile 16:
 
   Normaler Benutzer   
 
   Normaler Benutzer   
  
;Überprüfung des Rückgabewerts
+
== Überprüfung des Rückgabewerts ==
* echo $? 
+
*Der Rückgabewert des letzten Kommandos kann mit '''echo $?''' ausgegeben werden.*   
  zeigt den Exit-Status des zuletzt ausgeführten Befehls an. 
+
  0 = wahr / erfolgreich  
  0 = wahr, ≠0 = falsch 
+
   ≠0 = falsch / Fehler  
 
 
;Hinweise
 
* Besonders nützlich für Einzeiler und kurze Bedingungen. 
 
* Bei komplexeren Bedingungen sollte die if-Struktur verwendet werden. 
 
* Die logischen Operatoren basieren ausschließlich auf dem Exit-Status des vorherigen Kommandos.
 
 
 
== Strukturelle Verzweigungen mit if / elif / else ==
 
 
 
*Mit '''if''' können ganze Befehlsblöcke abhängig von Bedingungen ausgeführt werden.*   
 
*Die Bash prüft die angegebene Bedingung – ist sie wahr (Exit-Status 0), werden die nachfolgenden Befehle im Block ausgeführt.* 
 
 
 
;Syntax
 
if [ Bedingung ]; then
 
  Befehle
 
elif [ andere Bedingung ]; then
 
  Befehle
 
else
 
  Befehle
 
fi
 
 
 
;Einfaches Beispiel
 
if [ "$USER" = "root" ]; then
 
  echo "Administrator"
 
else
 
  echo "Normaler Benutzer"
 
fi
 
 
 
Ausgabe:  
 
   Normaler Benutzer 
 
 
 
;Beispiel mit elif
 
if [ "$USER" = "root" ]; then
 
  echo "Administrator"
 
elif [ "$USER" = "thomas" ]; then
 
  echo "Willkommen Thomas"
 
else
 
  echo "Unbekannter Benutzer"
 
fi
 
 
 
Ausgabe: 
 
  Willkommen Thomas 
 
 
 
;Hinweise
 
* Jede Bedingung liefert einen Exit-Status, der von if ausgewertet wird. 
 
* Der Befehl nach dem ersten zutreffenden Vergleich wird ausgeführt, danach verlässt die Shell die Struktur. 
 
* Mehrere elif-Zweige sind möglich, aber nur ein else-Zweig. 
 
* Die Syntax '''then''' kann auch in einer neuen Zeile oder mit Semikolon ''';''' nach der Bedingung stehen.  
 
  
= Aufgaben =
+
== Hinweise ==
 +
* Eignet sich für **Einzeiler** und kurze logische Prüfungen. 
 +
* Die Auswertung basiert ausschließlich auf dem **Exit-Status**. 
 +
* Für komplexere Abläufe sollte die klassische if-Struktur verwendet werden.
  
*Erstellen Sie eine Bedingung, die prüft, ob eine Datei '''/etc/passwd''' existiert, und geben Sie eine passende Meldung aus.*   
+
== Aufgaben ==
*Schreiben Sie eine Bedingung, die prüft, ob eine Variable leer ist oder nicht, und geben Sie entsprechend „leer“ oder „nicht leer“ aus.*   
+
*Überprüfen Sie mit einem Einzeiler, ob die Datei '''/etc/passwd''' existiert, und geben Sie eine Meldung aus.*   
*Erstellen Sie eine if-Struktur, die zwischen drei möglichen Benutzernamen unterscheidet (root, thomas, andere).*   
+
*Prüfen Sie, ob eine Variable '''NAME''' leer ist oder nicht, und geben Sie „leer“ oder „nicht leer“ aus.*   
*Bauen Sie die erste Aufgabe als Einzeiler mit '''&&''' und '''||''' um.*
+
*Bauen Sie einen Einzeiler, der „Root-Benutzer“ oder „Normaler Benutzer“ anzeigt, abhängig vom aktuellen Login-Namen.*   
 +
*Geben Sie nach jeder Prüfung den Exit-Status mit '''echo $?''' aus.*

Version vom 17. Oktober 2025, 15:19 Uhr

Kurzlogische Verzweigungen (&& und ||)

  • Kurzlogische Verzweigungen nutzen den Rückgabewert (Exit-Status) eines Befehls, um Folgeaktionen in einer Zeile auszuführen.*
  • Dadurch können einfache Prüfungen kompakt formuliert werden, ohne die if-Struktur zu verwenden.*

Grundprinzip

  • && (UND): führt den nächsten Befehl **nur** aus, wenn der vorherige erfolgreich war (Exit-Status 0).
  • || (ODER): führt den nächsten Befehl **nur** aus, wenn der vorherige **nicht** erfolgreich war (Exit-Status ≠ 0).

Beispiele

  • [ -f /etc/passwd ] && echo "Datei existiert"
 Datei existiert  
  • [ -d /root ] || echo "Verzeichnis /root existiert nicht"
 Verzeichnis /root existiert nicht  
  • [ "$USER" = "root" ] && echo "Administrator" || echo "Normaler Benutzer"
 Normaler Benutzer  

Überprüfung des Rückgabewerts

  • Der Rückgabewert des letzten Kommandos kann mit echo $? ausgegeben werden.*
 0 = wahr / erfolgreich  
 ≠0 = falsch / Fehler  

Hinweise

  • Eignet sich für **Einzeiler** und kurze logische Prüfungen.
  • Die Auswertung basiert ausschließlich auf dem **Exit-Status**.
  • Für komplexere Abläufe sollte die klassische if-Struktur verwendet werden.

Aufgaben

  • Überprüfen Sie mit einem Einzeiler, ob die Datei /etc/passwd existiert, und geben Sie eine Meldung aus.*
  • Prüfen Sie, ob eine Variable NAME leer ist oder nicht, und geben Sie „leer“ oder „nicht leer“ aus.*
  • Bauen Sie einen Einzeiler, der „Root-Benutzer“ oder „Normaler Benutzer“ anzeigt, abhängig vom aktuellen Login-Namen.*
  • Geben Sie nach jeder Prüfung den Exit-Status mit echo $? aus.*