if: Unterschied zwischen den Versionen
Michi (Diskussion | Beiträge) |
Michi (Diskussion | Beiträge) (→Wenn eine if-Bedingung keinen Befehl enthält) |
||
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 37: | Zeile 37: | ||
# <b>if ls /etc/passwd; then wc -l /etc/passwd; fi</b> | # <b>if ls /etc/passwd; then wc -l /etc/passwd; fi</b> | ||
+ | bzw. | ||
+ | #!/bin/bash | ||
+ | if [ -f "/etc/passwd" ]; then | ||
+ | wc -l /etc/passwd | ||
+ | fi</b> | ||
+ | 44 /etc/passwd | ||
− | + | Falls die Variable SHELL den Wert "/bin/bash" enthält, so wird ein bestimmter Text ausgegeben. | |
− | #!/bin/ | + | #!/bin/bash |
− | if [ "$SHELL" = "/bin/bash" ]; then | + | if [ "${SHELL}" = "/bin/bash" ]; then |
− | echo " | + | echo "Deine Anmeldeshell ist die Bash (Bourne again shell)" |
else | else | ||
− | echo " | + | echo "Deine Anmeldeshell ist nicht die Bash, sondern ${SHELL}" |
fi | fi | ||
− | - | + | Falls Variable ZEICHEN den Wert "A" oder "B" enthält, so wird ein entsprechender Text ausgegeben. |
+ | |||
+ | #!/bin/bash | ||
+ | if [ "${ZEICHEN}" = "A" ] || [ "${ZEICHEN}" = "B" ]; then | ||
+ | echo "Das Zeichen ${ZEICHEN} ist ein A oder ein B" | ||
+ | else | ||
+ | echo "Das Zeichen ${ZEICHEN} ist kein A und kein B" | ||
+ | fi | ||
+ | |||
+ | Falls Datei "/etc/password" vorhanden ist, so wird ihr Inhalt mit cat ausgegeben - ansonsten wird das Skript mit exit beendet. | ||
− | #!/bin/ | + | #!/bin/bassh |
− | if | + | if [ -f "/etc/password" ]; then |
− | + | cat /etc/password | |
− | |||
else | else | ||
echo "/etc/password ist keine Datei" | echo "/etc/password ist keine Datei" | ||
exit | exit | ||
+ | fi | ||
+ | |||
+ | Falls Variable a grösser oder gleich 10 ist, so wird <b>nichts</b> (:) weiter gemacht. Falls sie aber kleiner oder gleich 5 ist, so wird "1" ausgegeben - ansonsten "2". | ||
+ | |||
+ | #!/bin/bash | ||
+ | if [ "$a" -ge 10 ]; then | ||
+ | : | ||
+ | elif [ "$a" -le 5 ]; then | ||
+ | echo "1" | ||
+ | else | ||
+ | echo "2" | ||
+ | fi | ||
+ | |||
+ | == FAQ == | ||
+ | |||
+ | === Wenn eine if-Bedingung keinen Befehl enthält === | ||
+ | |||
+ | * https://stackoverflow.com/questions/3224878/what-is-the-purpose-of-the-colon-gnu-bash-builtin | ||
+ | |||
+ | Beispiel - auf der Zeile mit ":" wird gar nichts passieren, die if-Bedingung wird so aber dennoch als gültig angesehen. | ||
+ | |||
+ | if command; then | ||
+ | : | ||
+ | else | ||
+ | command | ||
fi | fi | ||
Aktuelle Version vom 8. Dezember 2022, 15:32 Uhr
Der Shell-Befehl if ist eine Verzweigung zur Erzeugung einer bedingten Abfrage.
Inhaltsverzeichnis
Syntax
Folgende allgemeine bedingte Verzweigung führt Befehlsfolge1 aus. Ist der Exit-Status des letzten Befehls von Befehlsfolge1 eine 0, dann wird der "then"-Teil ausgeführt. Andernfalls wertet die Shell eine allfällig folgende und mit "elif" eingeleitete Befehlsfolge2 aus. Der zugehörige "then"-Teil wird ebenfalls nur ausgewertet, falls Befehlsfolge2 den Exit-Status 0 liefert. Steht am Ende der Sequenz eine "else"-Anweisung, dann wird Befehlsliste3 ausgeführt, falls keine der zuvor durchgeführten Abfragen zutrifft.
Grundsyntax | Gleichwertige Verschachtelungen | |
---|---|---|
if Befehlsfolge1 then Befehlsliste1 [elif Befehlsfolge2 then Befehlsliste2] [else Befehlsliste3] fi |
if Befehlsfolge1 then Befehlsliste1 else if Befehlsfolge2 then Befehlsliste2 fi fi |
if Befehlsfolge1 then Befehlsliste1 elif Befehlsfolge2 then Befehlsliste2 fi "elif" benötigt kein abschliessendes "fi". |
Verwendung
Wenn die Datei "/etc/passwd" vorhanden ist, werden die Anzahl Zeilen in der Datei gezählt.
# if ls /etc/passwd; then wc -l /etc/passwd; fi bzw. #!/bin/bash if [ -f "/etc/passwd" ]; then wc -l /etc/passwd fi 44 /etc/passwd
Falls die Variable SHELL den Wert "/bin/bash" enthält, so wird ein bestimmter Text ausgegeben.
#!/bin/bash if [ "${SHELL}" = "/bin/bash" ]; then echo "Deine Anmeldeshell ist die Bash (Bourne again shell)" else echo "Deine Anmeldeshell ist nicht die Bash, sondern ${SHELL}" fi
Falls Variable ZEICHEN den Wert "A" oder "B" enthält, so wird ein entsprechender Text ausgegeben.
#!/bin/bash if [ "${ZEICHEN}" = "A" ] || [ "${ZEICHEN}" = "B" ]; then echo "Das Zeichen ${ZEICHEN} ist ein A oder ein B" else echo "Das Zeichen ${ZEICHEN} ist kein A und kein B" fi
Falls Datei "/etc/password" vorhanden ist, so wird ihr Inhalt mit cat ausgegeben - ansonsten wird das Skript mit exit beendet.
#!/bin/bassh if [ -f "/etc/password" ]; then cat /etc/password else echo "/etc/password ist keine Datei" exit fi
Falls Variable a grösser oder gleich 10 ist, so wird nichts (:) weiter gemacht. Falls sie aber kleiner oder gleich 5 ist, so wird "1" ausgegeben - ansonsten "2".
#!/bin/bash if [ "$a" -ge 10 ]; then : elif [ "$a" -le 5 ]; then echo "1" else echo "2" fi
FAQ
Wenn eine if-Bedingung keinen Befehl enthält
Beispiel - auf der Zeile mit ":" wird gar nichts passieren, die if-Bedingung wird so aber dennoch als gültig angesehen.
if command; then : else command fi
Weblinks
Herausgeber | Sprache | Webseitentitel | Anmerkungen |
---|---|---|---|
Wikipedia | ger | Bedingte Anweisung und Verzweigungwbm | Enzyklopädischer Artikel |