if: Unterschied zwischen den Versionen
Michi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Michi (Diskussion | Beiträge) |
||
Zeile 89: | Zeile 89: | ||
* https://stackoverflow.com/questions/3224878/what-is-the-purpose-of-the-colon-gnu-bash-builtin | * https://stackoverflow.com/questions/3224878/what-is-the-purpose-of-the-colon-gnu-bash-builtin | ||
Beispiel - auf der | Beispiel - auf der Zeile mit ":" wird gar nichts passieren, die if-Bedingung wird so aber dennoch als gültig angesehen. | ||
if command; then | if command; then |
Version vom 17. März 2022, 14:16 Uhr
Der Shell-Befehl if ist eine Verzweigung zur Erzeugung einer bedingten Abfrage.
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 |