If: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(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…“) |
|||
| (5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| − | = if-Verzweigungen = | + | == if-Verzweigungen == |
| − | *Die if-Struktur ist die zentrale Möglichkeit, in Bash bedingte Abläufe zu steuern. | + | *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. | + | *Sie ermöglicht es, Befehle nur dann auszuführen, wenn eine bestimmte Bedingung erfüllt ist. |
== Grundprinzip == | == Grundprinzip == | ||
| − | *Die Bash prüft den | + | *Die Bash prüft den '''Exit-Status''' eines Kommandos oder Tests: |
| − | 0 bedeutet | + | 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. |
== Syntax == | == Syntax == | ||
| + | if [ Bedingung ]; then | ||
| + | Befehle bei wahr | ||
| + | fi | ||
| + | |||
| + | ;if mit else | ||
if [ Bedingung ]; then | if [ Bedingung ]; then | ||
Befehle bei wahr | Befehle bei wahr | ||
| Zeile 27: | Zeile 32: | ||
== Beispiele == | == Beispiele == | ||
| − | ;Einfaches Beispiel | + | ;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 | if [ -f /etc/passwd ]; then | ||
echo "Datei existiert" | echo "Datei existiert" | ||
| Zeile 34: | Zeile 47: | ||
fi | fi | ||
| − | Ausgabe: | + | Ausgabe: |
| − | Datei existiert | + | Datei existiert |
;Beispiel mit Benutzerabfrage | ;Beispiel mit Benutzerabfrage | ||
| Zeile 45: | Zeile 58: | ||
fi | fi | ||
| − | Ausgabe: | + | Ausgabe: |
| − | Normaler Benutzer | + | Normaler Benutzer |
;Beispiel mit elif | ;Beispiel mit elif | ||
| Zeile 60: | Zeile 73: | ||
== Überprüfung des Rückgabewerts == | == Überprüfung des Rückgabewerts == | ||
| − | *Der letzte ausgeführte Test oder Befehl liefert einen Rückgabewert, der mit '''echo $?''' angezeigt werden kann. | + | *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“. | + | *Ein Exit-Status von 0 bedeutet „Bedingung erfüllt“, ein anderer Wert „Bedingung nicht erfüllt“. |
;Beispiel | ;Beispiel | ||
| − | [ -d /etc ] | + | [ -d /etc ] |
| − | echo $? | + | echo $? |
0 | 0 | ||
| − | [ -d /nichtda ] | + | [ -d /nichtda ] |
| − | echo $? | + | echo $? |
1 | 1 | ||
== Hinweise == | == Hinweise == | ||
| − | * Die Klammern [ ] sind ein Synonym für den Befehl '''test'''. | + | * Die Klammern [ ] sind ein Synonym für den Befehl '''test'''. |
| − | * Leerzeichen zwischen den eckigen Klammern und der Bedingung sind Pflicht. | + | * 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. | + | * 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 numerische Vergleiche werden Operatoren wie -eq, -lt, -gt usw. verwendet. |
| − | * Für Stringvergleiche werden = und != genutzt. | + | * Für Stringvergleiche werden = und != genutzt. |
| − | == Erweiterte Syntax mit [[ ... ]] == | + | == Erweiterte Syntax mit <nowiki>[[ ... ]]</nowiki> == |
| − | *Die doppelten Klammern [[ ... ]] sind eine modernere Variante mit erweiterten Vergleichsmöglichkeiten. | + | *Die doppelten Klammern <nowiki>[[ ... ]]</nowiki> sind eine modernere Variante mit erweiterten Vergleichsmöglichkeiten. |
| − | *Sie unterstützen z. B. Mustervergleiche (Globbing) und logische Operatoren ohne Maskierung. | + | *Sie unterstützen z. B. Mustervergleiche (Globbing) und logische Operatoren ohne Maskierung. |
;Beispiel | ;Beispiel | ||
NAME="Thomas" | NAME="Thomas" | ||
| − | if [[ $NAME == Th* ]]; then | + | if <nowiki>[[</nowiki> $NAME == Th* <nowiki>]]</nowiki>; then |
echo "Name beginnt mit Th" | echo "Name beginnt mit Th" | ||
fi | fi | ||
== Typische Fehlerquellen == | == Typische Fehlerquellen == | ||
| − | * Fehlende Leerzeichen nach [ oder vor ]. | + | * Fehlende Leerzeichen nach [ oder vor ]. |
| − | * Unbeabsichtigte Auswertung leerer Variablen → in Anführungszeichen setzen! | + | * Unbeabsichtigte Auswertung leerer Variablen → in Anführungszeichen setzen! |
| − | * Falsche Vergleichsoperatoren (z. B. = statt -eq bei Zahlen). | + | * Falsche Vergleichsoperatoren (z. B. = statt -eq bei Zahlen). |
== Aufgaben == | == Aufgaben == | ||
| − | * | + | ;Vorgabe |
| − | * | + | Um festzustellen ob ein Host online ist kann man ping nutzen. |
| − | * | + | *ping -c 1 -w 1 1.1.1.1 > /dev/null |
| − | * | + | *echo $? |
| − | * | + | 0 |
| + | *ping -c 1 -w 1 1.1.2.1 > /dev/null | ||
| + | *echo $? | ||
| + | 1 | ||
| + | Um festzustellen ob port auf einem Host geöffnet ist kann man netcat nutzen. | ||
| + | |||
| + | *netcat -z 78.47.133.194 53 2> /dev/null | ||
| + | *echo $? | ||
| + | 0 | ||
| + | *netcat -z 78.47.133.194 51 2> /dev/null | ||
| + | *echo $? | ||
| + | 1 | ||
| + | =Aufgabe= | ||
| + | *Schreib ein Skript dem ihr eine Ip und Port übergibt. | ||
| + | *Testet das 2 Argumente übergeben werden, ansonsten Fehlermeldung und Abruch | ||
| + | *Schaut ob der Rechner online ist und gibt dies aus. | ||
| + | *Wenn er Online ist test ihr ob der Port offen ist und gibt dies aus. | ||
Aktuelle Version vom 25. November 2025, 14:47 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
- Vorgabe
Um festzustellen ob ein Host online ist kann man ping nutzen.
- ping -c 1 -w 1 1.1.1.1 > /dev/null
- echo $?
0
- ping -c 1 -w 1 1.1.2.1 > /dev/null
- echo $?
1
Um festzustellen ob port auf einem Host geöffnet ist kann man netcat nutzen.
- netcat -z 78.47.133.194 53 2> /dev/null
- echo $?
0
- netcat -z 78.47.133.194 51 2> /dev/null
- echo $?
1
Aufgabe
- Schreib ein Skript dem ihr eine Ip und Port übergibt.
- Testet das 2 Argumente übergeben werden, ansonsten Fehlermeldung und Abruch
- Schaut ob der Rechner online ist und gibt dies aus.
- Wenn er Online ist test ihr ob der Port offen ist und gibt dies aus.