Bash 'For' Loop: Tutorial und Beispiele

Bash (Bourne Again Shell) ist eine Shell-Eingabeaufforderung und Skriptsprache in GNU/Linux-Betriebssystemen. Es ist die Standard-Shell für die meisten Linux-Distributionen.

Wie die meisten Skriptsprachen bietet Bash Schleifensyntaxen, um ähnliche Aufgaben mehrmals zu wiederholen. In diesem Artikel erfahren Sie, wie Sie die Pro Schleife in Bash.

Einführung

Ein typisches Bash-Skript enthält eine Reihe von Befehlen, die nacheinander ausgeführt werden. Variablen können verwendet werden, um Strings, ganzzahlige Indexwerte, Ergebnisse eines Befehls usw. zu speichern. Schleifen sind erforderlich, wenn der Benutzer einen bestimmten Befehl mehrmals ausführen möchte. Dies ist insbesondere dann von Nutzen, wenn die Ausgabe eines Befehls in Form einer Liste erfolgt und bei jedem Ergebnis in der Liste ein zweiter Befehl ausgeführt werden soll.

Allgemeine Syntax

Die allgemeine Syntax für Pro Schleife in Bash ist:

für in do ... ... fertig

Hier die ist eine Bash-Variable, die ein gültiger Linux-Shell-Variablenname sein muss, dh der Name enthält eine Kombination aus Buchstaben (az, AZ), Zahlen (0-9) und Unterstrich ( _ ) und muss entweder mit einem Buchstaben oder beginnen eine Unterstreichung.

Der ist entweder ein benutzerdefinierter Bereich von Integer-Indizes, die in einer Schleife ausgeführt werden, oder eine benutzerdefinierte Liste von Integern oder Strings. Es kann auch einen anderen Linux-Befehl enthalten, jedoch muss die Ausgabe eines solchen Befehls durch Leerzeichen oder Zeilenumbrüche getrennt sein, dh von Bash in eine Liste geparst werden (Eine Liste in Bash ist im Grunde eine Sammlung von Werten, die durch ein Leerzeichen oder einen Zeilenumbruch getrennt sind ).

Welcher Befehl oder welche Befehle ausgeführt werden sollen, muss innerhalb des tun getan Block.

Sehen wir uns ein paar einfache Beispiele an.

Schleifen in einem Bereich von Integer-Werten: Der folgende Code erstellt Verzeichnisse mit den Namen dir1, dir2, dir3 bis dir10.

for i in {1..10} do mkdir dir$i done

Schleifen einer Liste fester Werte: Der folgende Code gibt jede Zeichenfolge oder Ganzzahl in der angegebenen festen Liste aus.

für i in Hallo 1 2 3 Tschüss! mach echo $ich fertig

Schleifen bei Ausgabe eines Befehls: Der folgende Code durchläuft die Ausgabe von ls und gibt den Namen jeder Datei im angegebenen Format aus.

for i in `ls` echo "Dateiname ist $i" done

Ausdrucksbasierte Syntax

Eine ausdrucksbasierte Syntax ähnlich der Programmiersprache C ist auch in Bash möglich:

for ((Ausdruck 1; Ausdruck 2; Ausdruck 3)) do ... ... fertig

Hier, Ausdruck 1 ist die Initialisierung der Indexvariable(n). Ausdruck 2 ist die Bedingung, wenn die Schleife verlassen werden muss; diese Bedingung wird in jeder Iteration überprüft. Ausdruck 3 gibt das Inkrement/Dekrement/Änderung des Wertes der Indexvariable(n) an

Das folgende Beispiel druckt einfach Werte von 0 bis 4:

for ((i=0;i<5;i++)) do echo $i done

Das folgende Beispiel erstellt eine Endlosschleife, da keine Ausdrücke angegeben werden:

for (( ; ; )) do echo "Drücken Sie Strg-C zum Stoppen" done

Pause und weiter

Break-Anweisung für bedingten Exit

Wir können auch die bedingte Anweisung verwenden wenn innerhalb der Schleife. Der wenn Anweisung kann mit a . verwendet werden brechen -Anweisung für ein bedingtes Verlassen der Schleife.

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then break else echo $i; fi fertig

Die obige Schleife gibt Zahlen von 0 bis 4 aus. Wenn der Wert von i 5 ist, bricht sie aus der Schleife aus. Dies ist insbesondere dann von Nutzen, wenn eine Schleife verlassen werden soll, wenn ein Befehl eine bestimmte Ausgabe liefert. Die folgende Schleife wird beispielsweise unterbrochen, wenn eine leere Datei gefunden wird.

for file in `ls` do flen=`wc -c $file` if [[ "$flen" = "0 $file" ]] then echo "$file is empty" break else echo $flen fi done 

Der Befehl wc -c druckt die Anzahl der Zeilen in der Datei . Es druckt es im Format , zum Beispiel, 10 test.txt. Wir brechen aus der Schleife aus, wenn die Anzahl der Zeilen 0 beträgt, d. h. eine leere Datei.

Anweisung fortsetzen, um eine Iteration bedingt zu überspringen

Ähnlich wie C und viele andere Programmiersprachen hat auch bash ein Fortfahren -Anweisung, um den verbleibenden Teil einer Iteration in einer Schleife zu überspringen, wenn eine bestimmte Bedingung erfüllt ist.

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] dann weiter fi echo $i; fertig

Die obige Schleife gibt Zahlen von 0 bis 10 aus, außer 5, da während der Iteration von i=5 es gibt eine Continue-Anweisung, die den Rest des Codes in der Schleife am Anfang mit der Iteration von . überspringt i=6.

Im folgenden Beispiel geben wir die Anzahl der Zeilen in einer Datei aus, und eine bestimmte Iteration wird Fortfahren wenn es ein Verzeichnis und keine Datei ist.

for file in `ls` do if [[ -d $file ]] dann weiter fi wc -c "$file" done

[[ -d $datei ]] prüft, ob die Datei ein Verzeichnis ist. Wenn dies der Fall ist, springen wir zur nächsten Datei, d. h. zur nächsten Iteration. Wenn es sich nicht um ein Verzeichnis handelt, drucken wir die Anzahl der Zeilen in der Datei mit Toilette Befehl, wie auch zuvor gezeigt.

Schleifen verwenden: Skripte und Befehlszeile

Die Schleifensyntax kann direkt in der Bash-Shell oder aus einer Shell-Skriptdatei verwendet werden. Einmal Pro Loop-Syntax auf der Shell eingegeben wird, setzt die Shell die Eingabeaufforderung fort, damit der Benutzer die zu wiederholenden Befehle fortsetzen kann.

Oder der Benutzer kann dies in einer Skriptdatei speichern und die Skriptdatei ausführen.

Der #!/bin/bash at the start gibt den Interpreter an, der bei der Ausführung der Datei verwendet werden soll. Obwohl Bash heutzutage die am häufigsten verwendete Shell ist, bevorzugen einige Benutzer Shells wie zsh, die anstelle von bash am Anfang dieser Datei angegeben werden sollte.

Ausführungsberechtigungen erteilen Führen Sie für diese Datei Folgendes aus:

chmod +x test.sh

Endlich, die Datei ausführen, Lauf:

./test.sh

Fazit

Der Pro loop in Bash ist eine ziemlich einfache Funktion, die jedoch in fast allen komplexen Skriptszenarien verwendet wird. Das Erlernen ist ein langer Weg, egal ob Sie ein regelmäßiger oder fortgeschrittener Linux-Benutzer sind oder beginnen, Automatisierung für Systemadministrations- und DevOps-Aufgaben zu erlernen.