Es stehen zwei Arten von bash for Schleifen zur Verfügung. Eine mit dem Schlüsselwort“ in “ mit Werteliste, eine andere mit der C-Programmierung wie Syntax.
Dieser Artikel ist Teil unserer Laufenden bash-tutorial-Reihe.
Dies erklärt die beiden bash for loop-Methoden und bietet 12 verschiedene Beispiele für die Verwendung der bash for loop in Ihren Shell-Skripten.
Lesezeichen dieser Artikel für zukünftige Referenz, dies ist der einzige Artikel, den Sie jemals brauchen würden, um zu finden, wie zu verwenden die bash-Schleifen mit Beispielen.,
Methode 1: Bash For-Schleife mit „in“ und die Liste der Werte
Syntax:
for varname in listdo command1 command2 ..done
In der obigen syntax:
- für, in, tun und getan ist, sind keywords
- „Liste“ enthält eine Liste der Werte. Die Liste kann eine Variable sein, die mehrere durch Leerzeichen getrennte Wörter enthält. Wenn list in der for Anweisung fehlt, wird der Positionsparameter verwendet, der an die Shell übergeben wurde.
- varname ist ein beliebiger Bash-Variablenname.
In dieser Form führt die for Anweisung die Befehle aus, die in einem body eingeschlossen sind, einmal für jedes Element in der Liste., Wenn die Werteliste beispielsweise 5 Elemente enthält, wird die for-Schleife insgesamt 5 Mal ausgeführt, einmal für jedes Element in der Liste. Das aktuelle Element aus der Liste wird jedes Mal in der Schleife in einer Variablen „varname“ gespeichert. Dieser „varname“ kann im Hauptteil der for Schleife verarbeitet werden.
Methode 2: Bash Für Schleife mit C wie syntax
Die zweite form der for schleife ist ähnlich die für schleife in „C“ programmiersprache, die hat drei ausdrücke (initialisierung, zustand und aktualisierung).,
for (( expr1; expr2; expr3 ))do command1 command2 ..done
In der obigen Bash für Befehlssyntax wird
- Vor der ersten Iteration wird expr1 ausgewertet. Dies wird normalerweise verwendet, um Variablen für die Schleife zu initialisieren.
- Alle Anweisungen zwischen do und done werden wiederholt ausgeführt, bis der Wert von expr2 WAHR ist.
- Nach jeder Iteration der Schleife wird expr3 ausgewertet. Dies wird normalerweise verwendet, um einen Schleifenzähler zu erhöhen.
Die folgenden 12 Beispiele zeigen, wie man auf verschiedene Arten nach Schleifen sucht.,
Statische Werte für die Liste nach dem Schlüsselwort“ in “
Im folgenden Beispiel wird die Liste der Werte (Mo, Di, Mi, Do und Fr) direkt nach dem Schlüsselwort „in“ in der Bash-for-Schleife angegeben.
Achtung: Die Werteliste darf nicht durch Komma getrennt werden (Mo, Di, Mi, Do, Fr). Das Komma wird als Teil des Werts behandelt. dh Anstelle von “ Mon „wird“ Mon “ als Wert verwendet, wie im folgenden Beispiel gezeigt.
Achtung: Die Werteliste sollte nicht in einem doppelten Anführungszeichen stehen. („Mo Di Mi Do Fr“)., Wenn Sie in Anführungszeichen setzen, wird es als einzelner Wert (anstelle von 5 verschiedenen Werten) behandelt, wie im folgenden Beispiel gezeigt.
$ cat for1-wrong2.shi=1for day in "Mon Tue Wed Thu Fri"do echo "Weekday $((i++)) : $day"done$ ./for1-wrong2.shWeekday 1 : Mon Tue Wed Thu Fri
Variable für die Liste nach dem Schlüsselwort“ in „
Anstatt die Werte direkt in der for-Schleife anzugeben, können Sie die Werte in einer Variablen speichern und die Variable in der for-Schleife nach dem Schlüsselwort“ in “ verwenden, wie im folgenden Beispiel gezeigt.
Vorsicht: Als Best Practice sollten Sie die Bash-Variablen immer zitieren, wenn Sie sie verweisen. Es gibt wenige Ausnahmen von dieser Best-Practice-Regel. Dies ist einer von Ihnen., Wenn Sie die Variable in dieser for-Schleife doppelt angeben, wird die Werteliste als Einzelwert behandelt. Viele Leute fallen in diese Falle. Seien Sie vorsichtig und zitieren Sie Ihre Variable nicht doppelt in der for Schleife.
Geben Sie die Liste nicht an; Holen Sie sie aus den Positionsparametern
Wenn Sie das Schlüsselwort „in“ gefolgt von einer Liste von Werten in der bash for-Schleife nicht angeben, werden die Positionsparameter verwendet (dh die Argumente, die an das Shell-Skript übergeben werden).
Vorsicht: Bitte seien Sie vorsichtig, wenn Sie diese Methode verwenden. Sie sollten das Schlüsselwort „in“ nicht in die for-Schleife aufnehmen., Wenn Sie das Schlüsselwort „in“ ohne Werte belassen, wird der Positionsparameter nicht wie unten gezeigt verwendet. Es wird nicht in die Schleife gehen. dh die for-Schleife wird niemals ausgeführt, wie im folgenden Beispiel gezeigt.
$ cat for3-wrong.shi=1for day indo echo "Weekday $((i++)) : $day"done$ ./for3-wrong.sh Mon Tue Wed Thu Fri
Hinweis: Lesen Sie unseren früheren Artikel, um mehr über Bash-Positionsparameter zu erfahren.
Unix-Befehl, der die Ausgabe als Liste der Werte, die nach dem Schlüsselwort „in“
Sie können verwenden Sie die Ausgabe von jedem UNIX / Linux-Befehl als Liste der Werte, die die for-Schleife, indem man den Befehl in back-ticks ` ` wie unten gezeigt.,
Durchlaufen Sie Dateien und Verzeichnisse in einer for-Schleife
Um Dateien und Verzeichnisse unter einem bestimmten Verzeichnis zu durchlaufen, kopieren Sie einfach in dieses Verzeichnis und geben Sie * in die for-Schleife ein, wie unten gezeigt.
Das folgende Beispiel durchläuft alle Dateien und Verzeichnisse unter Ihrem Home-Verzeichnis.
Die Verwendung von * in der bash for-Schleife ähnelt dem Datei-Globbing, das wir in der Linux-Befehlszeile verwenden, wenn wir den Befehl ls (und andere Befehle) verwenden.
Im Folgenden werden beispielsweise alle Dateien und Verzeichnisse unter Ihrem Home-Verzeichnis angezeigt., Dies ist das Konzept, das oben verwendet wird for5.sh beispiel.
cd ~ls *
im folgenden werden alle *.conf-Datei, die entweder mit a, b oder c oder d im Verzeichnis /etc beginnt.
$ ls -1 /etc/*.conf/etc/asound.conf/etc/autofs_ldap_auth.conf/etc/cas.conf/etc/cgconfig.conf/etc/cgrules.conf/etc/dracut.conf
Dasselbe Argument, das im obigen ls-Befehl verwendet wird, kann in einer bash for-Schleife verwendet werden, wie im folgenden Beispiel gezeigt.
Aus der for-Schleife ausbrechen
Sie können mit dem Befehl ‚break‘ wie unten gezeigt aus einer for-Schleife ausbrechen.,
$ cat for6.shi=1for day in Mon Tue Wed Thu Frido echo "Weekday $((i++)) : $day" if ; then break; fidone$ ./for6.shWeekday 1 : MonWeekday 2 : Tue
Weiter oben in der for-Schleife
Unter bestimmten Bedingungen können Sie den Rest der Befehle in der for-Schleife ignorieren und die Schleife von oben fortsetzen (für den nächsten Wert in der Liste) mit dem Befehl continue wie unten gezeigt.
Das folgende Beispiel fügt „(WOCHENENDE)“ zu Sa und Sonne und „(Wochentag)“ zu den restlichen Tagen hinzu.
Bash for loop using C program syntax
In diesem Beispiel wird die zweite Methode von bash for loop verwendet, die der C for loop Syntax ähnelt., Das folgende Beispiel generiert 5 Zufallszahlen mit dem bash C-style for loop.
9. Unendliche Bash für Schleife
Wenn Sie den Start, die Bedingung und das Inkrement im Bash-C-Stil für Schleife nicht angeben, wird es Endlosschleife. Sie müssen Strg-C drücken, um die Schleife zu stoppen.
$ cat for9.shi=1;for (( ; ; ))do sleep $i echo "Number: $((i++))"done
Drücken Sie wie oben gesagt Strg-C, um aus dieser Bash-Unendlichkeit auszubrechen, zum Beispiel.,
$ ./for9.shNumber: 1Number: 2Number: 3
Mit Komma in der bash C-style for Schleife
In der bash c-style Schleife, abgesehen von Inkrementieren Sie den Wert, der in der Bedingung verwendet wird, Sie können auch einen anderen Wert erhöhen, wie unten gezeigt.
Im Initialisierungsabschnitt und im Inkrementabschnitt der bash C-style for-Schleife können Sie mehrere Werte haben, indem Sie wie unten gezeigt durch Komma trennen.
Die folgende for-Schleife wird insgesamt 5 Mal ausgeführt, wobei die Variable i verwendet wird. Die Variable j beginnt jedoch mit 5 und wird jedes Mal um 5 erhöht, wenn die Schleife ausgeführt wird.,
$ cat for10.shfor ((i=1, j=10; i <= 5 ; i++, j=j+5))do echo "Number $i: $j"done$ ./for10.shNumber 1: 10Number 2: 15Number 3: 20Number 4: 25Number 5: 30
Zahlenbereich nach dem Schlüsselwort“ in „
Sie können den Zahlenbereich in der for-Schleife“ in “ mit der Klammererweiterung durchlaufen.
Das folgende Beispiel durchläuft 10 Mal mit den Werten 1 bis 10.
$ cat for11.shfor num in {1..10}do echo "Number: $num"done$ ./for11.shNumber: 1Number: 2Number: 3Number: 4Number: 5...
Zahlenbereich mit Inkrementen nach dem Schlüsselwort“ in “
Das folgende Beispiel durchläuft 5 Mal die Werte 1 bis 10 mit einem Inkrement von 2. dh Es beginnt mit 1 und erhöht sich weiter um 2, bis es 10 erreicht.,
$ cat for12.shfor num in {1..10..2}do echo "Number: $num"done$ ./for12.shNumber: 1Number: 3Number: 5Number: 7Number: 9
PS: Vergessen Sie nicht, diesen Artikel als Lesezeichen für Ihre zukünftige Referenz zu verwenden.
Wenn Sie diesen Artikel genossen haben, könnten Sie auch mögen..
|
|