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…“)
 
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
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). 
+
* [ -f /etc/passwd ] && echo "Datei existiert"
* '''||''' (ODER): führt den folgenden Befehl nur aus, wenn der vorherige nicht erfolgreich war (Exit-Status ≠ 0). 
+
  Datei existiert
 +
* [ -d /root ] || echo "Verzeichnis /root existiert nicht"
 +
  Verzeichnis /root existiert nicht
 +
* [ "$USER" = "root" ] && echo "Administrator" || echo "Normaler Benutzer"
 +
  Normaler Benutzer
  
;Beispiele
+
== Überprüfung des Rückgabewerts ==
* [ -f /etc/passwd ] && echo "Datei existiert" 
+
*Der Rückgabewert des letzten Kommandos kann mit '''echo $?''' ausgegeben werden.
   Datei existiert 
+
   0 = wahr / erfolgreich
* [ -d /root ] || echo "Verzeichnis /root existiert nicht" 
+
   ≠0 = falsch / Fehler
   Verzeichnis /root existiert nicht 
 
* [ "$USER" = "root" ] && echo "Administrator" || echo "Normaler Benutzer" 
 
  Normaler Benutzer 
 
  
;Überprüfung des Rückgabewerts
+
== Hinweise ==
* echo $? 
+
* Eignet sich für **Einzeiler** und kurze logische Prüfungen.
  zeigt den Exit-Status des zuletzt ausgeführten Befehls an.
+
* Die Auswertung basiert ausschließlich auf dem **Exit-Status**.
  0 = wahr, ≠0 = falsch 
+
* Für komplexere Abläufe sollte die klassische if-Struktur verwendet werden.
  
;Hinweise
+
= Aufgaben zu kurzlogischen Verzweigungen (&& und ||) =
* 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 ==
+
== Dienstprüfung ==
 +
*Prüfen Sie in einem Einzeiler, ob der Dienst ssh läuft, und geben Sie je nach Ergebnis „SSH aktiv“ oder „SSH inaktiv“ aus.
  
*Mit '''if''' können ganze Befehlsblöcke abhängig von Bedingungen ausgeführt werden.* 
+
== Schreibrechte ==
*Die Bash prüft die angegebene Bedingung – ist sie wahr (Exit-Status 0), werden die nachfolgenden Befehle im Block ausgeführt.
+
*Überprüfen Sie, ob /tmp für den aktuellen Benutzer beschreibbar ist und geben Sie eine entsprechende Meldung aus.
  
;Syntax
+
== Benutzer vorhanden ==
if [ Bedingung ]; then
+
*Prüfen Sie mit einem Einzeiler, ob der Benutzer backup in /etc/passwd existiert. Geben Sie „Benutzer vorhanden“ oder „Benutzer fehlt“ aus.
  Befehle
 
elif [ andere Bedingung ]; then
 
  Befehle
 
else
 
  Befehle
 
fi
 
  
;Einfaches Beispiel
+
== Datei leer oder nicht ==
if [ "$USER" = "root" ]; then
+
*Ermitteln Sie, ob die Datei /var/log/syslog leer ist und geben Sie „leer“ oder „nicht leer“ aus.
  echo "Administrator"
 
else
 
  echo "Normaler Benutzer"
 
fi
 
  
Ausgabe: 
+
== Paketprüfung ==
  Normaler Benutzer 
+
*Überprüfen Sie, ob das Paket curl installiert ist. Geben Sie „curl OK“ oder „curl fehlt“ aus.
  
;Beispiel mit elif
+
== Portprüfung ==
if [ "$USER" = "root" ]; then
+
*Prüfen Sie in einem Einzeiler, ob TCP-Port 22 offen ist und geben Sie eine passende Meldung aus.
  echo "Administrator"
 
elif [ "$USER" = "thomas" ]; then
 
  echo "Willkommen Thomas"
 
else
 
  echo "Unbekannter Benutzer"
 
fi
 
  
Ausgabe: 
+
== Variablenprüfung ==
  Willkommen Thomas 
+
*Setzen Sie vorab die Variable X=42 und prüfen Sie in einem Einzeiler, ob der Wert größer als 10 ist. Geben Sie „groß“ oder „klein“ aus.
  
;Hinweise
+
== Exit-Code prüfen ==
* Jede Bedingung liefert einen Exit-Status, der von if ausgewertet wird. 
+
*Führen Sie ./check.sh aus und geben Sie abhängig vom Rückgabewert „OK“ oder „FEHLER“ aus.
* 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 =
 
 
 
*Erstellen Sie eine Bedingung, die prüft, ob eine Datei '''/etc/passwd''' existiert, und geben Sie eine passende Meldung aus.* 
 
*Schreiben Sie eine Bedingung, die prüft, ob eine Variable leer ist oder nicht, und geben Sie entsprechend „leer“ oder „nicht leer“ aus.
 
*Erstellen Sie eine if-Struktur, die zwischen drei möglichen Benutzernamen unterscheidet (root, thomas, andere).* 
 
*Bauen Sie die erste Aufgabe als Einzeiler mit '''&&''' und '''||''' um.*
 

Aktuelle Version vom 25. November 2025, 15:33 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 zu kurzlogischen Verzweigungen (&& und ||)

Dienstprüfung

  • Prüfen Sie in einem Einzeiler, ob der Dienst ssh läuft, und geben Sie je nach Ergebnis „SSH aktiv“ oder „SSH inaktiv“ aus.

Schreibrechte

  • Überprüfen Sie, ob /tmp für den aktuellen Benutzer beschreibbar ist und geben Sie eine entsprechende Meldung aus.

Benutzer vorhanden

  • Prüfen Sie mit einem Einzeiler, ob der Benutzer backup in /etc/passwd existiert. Geben Sie „Benutzer vorhanden“ oder „Benutzer fehlt“ aus.

Datei leer oder nicht

  • Ermitteln Sie, ob die Datei /var/log/syslog leer ist und geben Sie „leer“ oder „nicht leer“ aus.

Paketprüfung

  • Überprüfen Sie, ob das Paket curl installiert ist. Geben Sie „curl OK“ oder „curl fehlt“ aus.

Portprüfung

  • Prüfen Sie in einem Einzeiler, ob TCP-Port 22 offen ist und geben Sie eine passende Meldung aus.

Variablenprüfung

  • Setzen Sie vorab die Variable X=42 und prüfen Sie in einem Einzeiler, ob der Wert größer als 10 ist. Geben Sie „groß“ oder „klein“ aus.

Exit-Code prüfen

  • Führen Sie ./check.sh aus und geben Sie abhängig vom Rückgabewert „OK“ oder „FEHLER“ aus.