if: Unterschied zwischen den Versionen
Michi (Diskussion | Beiträge) |
Michi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 9: | Zeile 9: | ||
|- | |- | ||
| valign=top width=33% | | | valign=top width=33% | | ||
<pre class=wiki> | |||
if <i>Befehlsfolge1</i> | |||
then <i>Befehlsliste1</i> | |||
[elif <i>Befehlsfolge2</i> | |||
then <i>Befehlsliste2</i>] | |||
[else <i>Befehlsliste3</i>] | |||
fi | |||
</pre> | |||
| valign=top width=33% | | | valign=top width=33% | | ||
<pre class=wiki> | |||
if <i>Befehlsfolge1</i> | |||
then <i>Befehlsliste1</i> | |||
else if <i>Befehlsfolge2</i> | |||
then <i>Befehlsliste2</i> | |||
fi | |||
fi | |||
</pre> | |||
| valign=top width=33% | | | valign=top width=33% | | ||
<pre class=wiki> | |||
if <i>Befehlsfolge1</i> | |||
then <i>Befehlsliste1</i> | |||
elif <i>Befehlsfolge2</i> | |||
then <i>Befehlsliste2</i> | |||
fi | |||
</pre> | |||
|} | |} | ||
Zeile 37: | Zeile 41: | ||
# <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 | ||
== Weblinks == | == Weblinks == | ||
{{ | {{Weblinks}} | ||
}} | {{url_dewikipedia|Bedingte_Anweisung_und_Verzweigung|Bedingte Anweisung und Verzweigung}} | ||
{{Fuss}} | |||
* http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-11.html | |||
{{cat|Shell-Befehl}} | {{cat|Shell-Befehl}} | ||
{{cat|Verzweigung}} | {{cat|Verzweigung}} |
Aktuelle Version vom 8. Mai 2024, 20:27 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 <i>Befehlsfolge1</i> then <i>Befehlsliste1</i> [elif <i>Befehlsfolge2</i> then <i>Befehlsliste2</i>] [else <i>Befehlsliste3</i>] fi |
if <i>Befehlsfolge1</i> then <i>Befehlsliste1</i> else if <i>Befehlsfolge2</i> then <i>Befehlsliste2</i> fi fi |
if <i>Befehlsfolge1</i> then <i>Befehlsliste1</i> elif <i>Befehlsfolge2</i> then <i>Befehlsliste2</i> 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 |