English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Im Gegensatz zu Sprachen wie Java, PHP usw. dürfen die Kontrollflüsse in sh nicht leer sein, wie im folgenden PHP-Flusskontrollcode gezeigt:
<?php if (isset($_GET["q"])) { search(q); } else { // Nichts tun }
In sh/In bash darf man das so nicht schreiben, wenn die else-Branche keine Anweisungen ausführt, dann sollte dieser else nicht geschrieben werden.
if Anweisungssyntax:
if condition then command1 command2 ... commandN fi
in einer Zeile schreiben (eignet sich für den Terminalbefehlszeilen-Prompt):
if [$$(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
Das Ende von fi ist das Gegenteil von if geschrieben, und ähnliche werden noch vorkommen.
if else Syntaxformat:
if condition then command1 command2 ... commandN else command fi
if else-if else Syntaxformat:
if condition1 then command1 elif condition2 then command2 else commandN fi
Nachfolgender Beispielcode überprüft, ob zwei Variablen gleich sind:
a=10 b=20 if [$a == $b ] then echo "a ist gleich b" elif [$a -gt $b ] then echo "a ist größer als b" elif [$a -lt $b ] then echo "a ist kleiner als b" else echo "Keine passenden Bedingungen" fi
Ausgaberesultat:
a ist kleiner als b
if else Anweisungen werden oft mit dem Befehl test kombiniert, wie folgt:
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo 'Zwei Zahlen sind gleich!' else echo 'Zwei Zahlen sind nicht gleich!' fi
Ausgaberesultat:
Zwei Zahlen sind gleich!
Wie andere Programmiersprachen auch, unterstützt Shell for-Schleifen.
Der allgemeine Format der for-Schleifen ist:
for var in item1 item2 ... itemN do command1 command2 ... commandN done
In einer Zeile schreiben:
for var in item1 item2 ... itemN; do command1; command2... done;
Wenn der Wert der Variable in der Liste ist, führt der for-Schleifen alle Befehle einmal aus, indem der Variablenname den aktuellen Wert aus der Liste abruft. Der Befehl kann jeder gültige Shell-Befehl und Anweisung sein. Die Liste kann Ersetzungen, Strings und Dateinamen enthalten.
Die Liste ist optional, wenn sie nicht verwendet wird, verwendet der for-Schleifen die Positionierungsparameter der Befehlszeile.
Zum Beispiel, geben Sie die Nummern in der aktuellen Liste in der Reihenfolge aus:
for loop in 1 2 3 4 5 do echo "The value is: $loop" done
Ausgaberesultat:
The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5
Reihenfolge der Ausgabe der Zeichen im String:
#!/bin/bash for str in This is a string do echo $str done
Ausgaberesultat:
This is a string
While-Schleifen werden verwendet, um eine Reihe von Befehlen ständig auszuführen und auch um Daten aus Eingabedateien zu lesen. Das Syntax-Format ist:
while condition do command done
Hier ist ein einfaches while-Schleifenbeispiel, das Testbedingung ist: Wenn int kleiner oder gleich 5erhöht. 1 Anfang, während jeder Schleifenverarbeitung, wird int um 1. Führen Sie das obige Skript aus und geben Sie zurück: 1 bis 5dann wird beendet.
#!/bin/bash int=1 while(( $int<=5 )) do echo $int let "int++" done
Führen Sie das Skript aus und geben Sie aus:
1 2 3 4 5
Der obige Beispiel verwendet den Bash let Befehl, der zum Ausführen eines oder mehrerer Ausdrücke verwendet wird, bei Variablenberechnungen ist nicht erforderlich, $ zu verwenden, um Variablen zu zeigen, Näheres siehe:Bash let Befehl
.
While-Schleifen können zur Lesung von Tastaturinformationen verwendet werden. Im folgenden Beispiel wird die Eingabeinformation als Variable FILM festgelegt, drücken Sie <Ctrl-D> Beenden der Schleife.
echo 'Drücken Sie <CTRL-D> Beenden' echo -n 'Geben Sie den Namen Ihrer Lieblingswebsite ein: ' while read FILM do echo "Ja! $FILM ist eine gute Website" done
Führen Sie das Skript aus und geben Sie ähnlich folgendes aus:
Drücken Sie <CTRL-D> Beenden Geben Sie den Namen Ihrer Lieblingswebsite ein: Basistutorial-Website Ja! Basistutorial-Website ist eine gute Website
Unendliche Schleifen Syntax Format:
while : do command done
oder
while true do command done
oder
for \
Der until-Loop führt eine Reihe von Befehlen aus, bis die Bedingung true wird.
Der until-Loop ist im Gegensatz zum while-Loop im Umgang.
Im Allgemeinen ist der while-Loop besser als der until-Loop, aber in einigen Fällen - nur in sehr seltenen Fällen - ist der until-Loop nützlicher.
Die Syntax ist wie folgt:
bis [ \ do command done
Die Bedingung ist in der Regel eine bedingte Ausdrucksformel. Wenn der Rückgabewert false ist, wird der Befehl im Loop fortgesetzt, andernfalls wird der Loop verlassen.
Im folgenden Beispiel verwenden wir den Befehl until, um 0 ~ 9 Anzahl der Zahlen:
#!/bin/bash a=0 bis [ \ -lt 10 ] do echo \ a=`expr \ + 1` done
Ergebnis der Ausführung:
Das Ausgaberesultat ist:
0 1 2 3 4 5 6 7 8 9
case ... esac Es ist ein mehrfach bedingtes Statement, ähnlich wie das switch ... case Statement in anderen Sprachen, eine mehrfache Zweigstruktur der Auswahl, jeder Zweig beginnt mit einem rechten eckigen Klammern, und wird mit zwei Semikolons ;; beendet, was bedeutet, dass der Befehl beendet ist und man aus dem gesamten case ... esac Statement aussteigt. esac (das ist das Gegenteil von case) ist das Endzeichen.
Man kann mit dem case-Ausdruck einen Wert mit einem Muster abgleichen, und wenn eine Übereinstimmung erfolgreich ist, wird der entsprechende Befehl ausgeführt.
case ... esac Die Syntax ist wie folgt:
case \ Muster1) command1 command2 ... commandN ;; Muster2) command1 command2 ... commandN ;; esac
case-Verhalten wie oben gezeigt, der Wert muss unbedingt ein Wort inverwendet, und jedes Muster muss mit einem rechten Klammern enden. Der Wert kann eine Variable oder eine Konstante sein, und wenn ein passender Wert gefunden wird, beginnen alle Befehle zwischen dem Wert und ;; zu ausgeführt werden.
Der Wert wird jede passende Regel überprüfen. Sobald eine Regel passt, wird der entsprechende Befehl ausgeführt und die andere Regel wird nicht fortgesetzt. Wenn keine passende Regel gefunden wird, wird das Sternchen * Diesen Wert zu erfassen und dann den folgenden Befehl auszuführen.
Das folgende Skript fordert eine Eingabe an: 1 bis 4,mit jedem Muster abzugleichen:
echo 'Eingabe' 1 bis 4 Zwischen den Zahlen:' echo 'Du hast die folgende Zahl eingegeben:' read aNum case $aNum in 1) echo 'Du hast ausgewählt' 1' ;; 2) echo 'Du hast ausgewählt' 2' ;; 3) echo 'Du hast ausgewählt' 3' ;; 4) echo 'Du hast ausgewählt' 4' ;; *) echo 'Du hast nichts eingegeben' 1 bis 4 Zwischen den Zahlen' ;; esac
Verschiedene Inhalte führen zu verschiedenen Ergebnissen, zum Beispiel:
Eingabe 1 bis 4 zwischen den Zahlen: Du hast die folgende Zahl eingegeben: 3 Du hast ausgewählt: 3
Die folgenden Skript matcht Zeichenfolgen:
#!/bin/sh site=\3codebox\ case \ "w3codebox") echo "基础教程网" ;; "google") echo "Google 搜索" ;; "taobao") echo "淘宝网" ;; esac
Das Ausgaberesultat ist:
Grundtutorialsite
Während des Zyklus kann es notwendig sein, aus dem Zyklus auszusteigen, bevor die Zyklusbedingung erreicht ist. Shell verwendet zwei Befehle, um diese Funktion zu realisieren: break und continue.
Der breakBefehl ermöglicht das Aussteigen aus allen Zyklen (beendet die Ausführung der folgenden Zyklen).
Im folgenden Beispiel führt das Skript in einen Endlosschleifen bis der Benutzer eine Zahl eingibt, die größer als5. Um aus diesem Zyklus auszusteigen und zum Shell- Prompt zurückzukehren, ist der breakBefehl erforderlich.
#!/bin/bash while : do echo -n "Eingabe 1 bis 5 zwischen den Zahlen": read aNum case $aNum in 1|2|3|4|5) echo "Die von Ihnen eingegebene Zahl beträgt $aNum!" ;; *) echo "Die von Ihnen eingegebene Zahl ist nicht 1 bis 5 zwischen "! Spiel beendet" break ;; esac done
Führen Sie den obigen Code aus, das Ausgaberesultat ist:
Eingabe 1 bis 5 zwischen den Zahlen:3 Die von Ihnen eingegebene Zahl beträgt 3! Eingabe 1 bis 5 zwischen den Zahlen:7 Die von Ihnen eingegebene Zahl ist nicht 1 bis 5 zwischen "! Spiel beendet"
Der continueBefehl ist ähnlich wie der breakBefehl, nur mit einem Unterschied: Er springt nicht aus allen Zyklen aus, sondern nur aus dem aktuellen Zyklus.
Veränderung des obigen Beispiels:
#!/bin/bash while : do echo -n "Eingabe 1 bis 5 zwischen den Zahlen: " read aNum case $aNum in 1|2|3|4|5) echo "Die von Ihnen eingegebene Zahl beträgt $aNum!" ;; *) echo "Die von Ihnen eingegebene Zahl ist nicht 1 bis 5 zwischen "!" continue echo "Spiel beendet" ;; esac done
Bei der Ausführung des Codes festgestellt, dass bei der Eingabe größer als5Wenn die Zahl, der Beispielzyklus endet nicht, der Anweisungecho "Spiel beendet"Wird niemals ausgeführt.