Android

Bash for loop

Shell Scripting - For Loops

Shell Scripting - For Loops

Inhaltsverzeichnis:

Anonim

Schleifen sind eines der grundlegenden Konzepte von Programmiersprachen. Schleifen sind praktisch, wenn Sie eine Reihe von Befehlen immer wieder ausführen möchten, bis eine bestimmte Bedingung erreicht ist.

In Skriptsprachen wie Bash sind Schleifen hilfreich, um sich wiederholende Aufgaben zu automatisieren.

In Bash-Skripten gibt es drei grundlegende Schleifenkonstrukte: for loop, while loop und until loop.

In diesem Tutorial werden die Grundlagen von for-Schleifen in Bash behandelt. Wir zeigen Ihnen auch, wie Sie die break- und continue-Anweisungen verwenden, um den Ablauf einer Schleife zu ändern.

Die Standard-Bash-For-Schleife

Die for-Schleife durchläuft eine Liste von Elementen und führt die angegebenen Befehle aus.

Die Bash for-Schleife hat die folgende Form:

for item in do done

Die Liste kann aus einer Reihe von durch Leerzeichen getrennten Zeichenfolgen, einem Zahlenbereich, der Ausgabe eines Befehls, einem Array usw. bestehen.

Schleife über Saiten

Im folgenden Beispiel durchläuft die Schleife jedes Element in der Liste der Zeichenfolgen, und das variable element wird auf das aktuelle Element gesetzt.

for element in Hydrogen Helium Lithium Beryllium do echo "Element: $element" done

Die Schleife erzeugt die folgende Ausgabe:

Element: Hydrogen Element: Helium Element: Lithium Element: Beryllium

Schleife über einen Nummernbereich

Mit dem Sequenzausdruck können Sie einen Bereich von Zahlen oder Zeichen angeben, indem Sie einen Anfangs- und einen Endpunkt des Bereichs definieren. Der Sequenzausdruck hat die folgende Form:

{START..END}

Im folgenden Beispiel durchläuft die Schleife alle Zahlen von 0 bis 3.

for i in {0..3} do echo "Number: $i" done

Number: 0 Number: 1 Number: 2 Number: 3

Ab Bash 4 kann bei der Verwendung von Bereichen auch ein Inkrement angegeben werden. Der Ausdruck hat folgende Form:

{START..END..INCREMENT}

for i in {0..20..5} do echo "Number: $i" done

Number: 0 Number: 5 Number: 10 Number: 15 Number: 20

Schleife über Array-Elemente

Sie können die for-Schleife auch verwenden, um ein Array von Elementen zu durchlaufen:

Im folgenden Beispiel definieren wir ein Array BOOKS und iterieren über jedes Element des Arrays.

BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby') for book in "${BOOKS}"; do echo "Book: $book" done

Book: In Search of Lost Time Book: Don Quixote Book: Ulysses Book: The Great Gatsby

Der C-Style Bash for Loop

Die Syntax des C-Stils für die Schleife hat die folgende Form:

for ((INITIALIZATION; TEST; STEP)) do done

Der INITIALIZATION Teil wird nur einmal ausgeführt, wenn die Schleife startet. Dann wird der TEST Teil ausgewertet. Wenn es falsch ist, wird die for-Schleife beendet. Wenn der TEST wahr ist, werden Befehle im Rumpf der for-Schleife ausgeführt und der STEP Teil aktualisiert.

Im folgenden Code beginnt die Schleife mit der Initialisierung von i = 0 und prüft dann vor jeder Iteration, ob i ≤ 10 . Wenn true, wird der aktuelle Wert von i und i mit 1 ( i++ ) i++ andernfalls wird die Schleife beendet.

for ((i = 0; i <= 1000; i++)); do echo "Counter: $i" done

Die Schleife iteriert 1001-mal und erzeugt die folgende Ausgabe:

Counter: 0 Counter: 1 Counter: 2… Counter: 998 Counter: 999 Counter: 1000

Anweisungen unterbrechen und fortsetzen

Mit den Anweisungen break und continue kann die Ausführung der for-Schleife gesteuert werden.

Break-Anweisung

Die break-Anweisung beendet die aktuelle Schleife und übergibt die Programmsteuerung an die Anweisung, die auf die terminierte Anweisung folgt. Es wird normalerweise verwendet, um die Schleife zu beenden, wenn eine bestimmte Bedingung erfüllt ist.

Im folgenden Beispiel verwenden wir die if-Anweisung, um die Ausführung der Schleife zu beenden, sobald das aktuell iterierte Element gleich 'Lithium' ist.

for element in Hydrogen Helium Lithium Beryllium; do if]; then break fi echo "Element: $element" done echo 'All Done!'

Element: Hydrogen Element: Helium All Done!

Continue-Anweisung

Die continue-Anweisung beendet die aktuelle Iteration einer Schleife und übergibt die Programmsteuerung an die nächste Iteration der Schleife.

Im folgenden Beispiel wird ein Bereich von Zahlen durchlaufen, und wenn das aktuelle iterierte Element gleich '2' ist, führt die continue-Anweisung dazu, dass die Ausführung zum Anfang der Schleife zurückkehrt und mit der nächsten Iteration fortgesetzt wird.

for i in {1..5}; do if]; then continue fi echo "Number: $i" done

Number: 1 Number: 3 Number: 4 Number: 5

Beispiele für Bash For-Schleifen

Umbenennen von Dateien mit Leerzeichen im Dateinamen

Das folgende Beispiel zeigt, wie Sie die Bash for-Schleife verwenden, um alle Dateien im aktuellen Verzeichnis mit einem Leerzeichen im Namen umzubenennen, indem Sie das Leerzeichen durch einen Unterstrich ersetzen.

for file in *\ *; do mv "$file" "${file// /_}" done

Lassen Sie uns den Code zeilenweise aufschlüsseln:

  • Die erste Zeile erstellt eine for-Schleife und durchläuft eine Liste aller Dateien mit einem Leerzeichen im Namen. Der Ausdruck *\ * erstellt die Liste. Die zweite Zeile gilt für jedes Element der Liste und verschiebt die Datei in eine neue, wobei das Leerzeichen durch einen Unterstrich ( _ ) ersetzt wird. Der Teil ${file// /_} verwendet die Shell-Parametererweiterung, um ein Muster innerhalb eines Parameters durch einen String zu ersetzen. done gibt das Ende des Schleifensegments an.

Dateierweiterung ändern

Das folgende Beispiel zeigt, wie Sie mit der Bash for-Schleife alle mit.jpeg endenden Dateien im aktuellen Verzeichnis umbenennen, indem Sie die Dateierweiterung von.jpeg in.jpg ersetzen.

for file in *.jpeg; do mv -- "$file" "${file%.jpeg}.jpg" done

Lassen Sie uns den Code Zeile für Zeile analysieren:

  • Die erste Zeile erstellt eine for-Schleife und durchläuft eine Liste aller Dateien, die mit ".jpeg" enden. Die zweite Zeile gilt für jedes Element der Liste und verschiebt die Datei in eine neue, wobei ".jpeg" durch ".jpg" ersetzt wird.. ${file%.jpeg} zum Entfernen des '.jpeg'-Teils aus dem Dateinamen unter Verwendung der durchgeführten Shell-Parameter-Erweiterung gibt das Ende des Schleifensegments an.

Fazit

Inzwischen sollten Sie ein gutes Verständnis dafür haben, wie Sie die Bash for-Schleife zum Durchlaufen von Listen verwenden.

Bash-Loop-Terminal