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 nützlich, um sich wiederholende Aufgaben zu automatisieren.
Es gibt drei grundlegende Schleifenkonstrukte in Bash-Skripten, for
Schleife, while
Schleife und until
Schleife.
In diesem Tutorial behandeln wir die Grundlagen von for-Schleifen in Bash. Wir zeigen Ihnen auch, wie Sie den break
verwenden und continue
Anweisungen, um den Ablauf einer Schleife zu ändern.
Die Standard-Bash for
Schleife #
Der for
Schleife iteriert über eine Liste von Elementen und führt die gegebenen Befehle aus.
Die Bash for
Schleife hat folgende Form:
for item in [LIST]
do
[COMMANDS]
done
Die Liste kann eine Reihe von Zeichenfolgen sein, die durch Leerzeichen getrennt sind, ein Zahlenbereich, die Ausgabe eines Befehls, ein Array usw.
Loop über Strings #
Im Beispiel unten durchläuft die Schleife jedes Element in der Liste der Zeichenfolgen und die 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 Zahlenbereich #
Sie können den Sequenzausdruck verwenden, um einen Bereich von Zahlen oder Zeichen anzugeben, indem Sie einen Anfangs- und einen Endpunkt des Bereichs definieren. Der Sequenzausdruck hat folgende Form:
{START..END}
Hier ist eine Beispielschleife, die alle Zahlen von 0 bis 3 durchläuft:
for i in {0..3}
do
echo "Number: $i"
done
Number: 0
Number: 1
Number: 2
Number: 3
Ab Bash 4 ist es auch möglich, bei der Verwendung von Bereichen eine Schrittweite anzugeben. Der Ausdruck hat folgende Form:
{START..END..INCREMENT}
Hier ist ein Beispiel, das zeigt, wie man um 5 erhöht:
for i in {0..20..5}
do
echo "Number: $i"
done
Number: 0
Number: 5
Number: 10
Number: 15
Number: 20
Array-Elemente durchlaufen #
Sie können auch den for
verwenden Schleife, um über ein Array von Elementen zu iterieren.
Im folgenden Beispiel definieren wir ein Array mit dem Namen 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
Die Bash-for-Schleife im C-Stil #
Die Syntax des C-Stils for
Schleife hat folgende Form:
for ((INITIALIZATION; TEST; STEP))
do
[COMMANDS]
done
Die INITIALIZATION
Teil wird nur einmal ausgeführt, wenn die Schleife beginnt. Dann der TEST
Teil wird ausgewertet. Wenn es falsch ist, wird die Schleife beendet. Wenn der TEST
wahr ist, Befehle innerhalb des Körpers von for
Schleife ausgeführt werden, und der STEP
Teil wird aktualisiert.
Im folgenden Beispielcode beginnt die Schleife mit der Initialisierung von i = 0
, und prüft vor jeder Iteration, ob i ≤ 10
. Wenn wahr, wird der aktuelle Wert von i
ausgegeben und [erhöht die Variable] i
um 1 (i++
), andernfalls wird die Schleife beendet.
for ((i = 0 ; i <= 1000 ; i++)); do
echo "Counter: $i"
done
Die Schleife wird 1001 Mal durchlaufen und die folgende Ausgabe erzeugen:
Counter: 0
Counter: 1
Counter: 2
...
Counter: 998
Counter: 999
Counter: 1000
break
und continue
Anweisungen #
Die break
und continue
Anweisungen können verwendet werden, um die Ausführung der for-Schleife zu steuern.
break
Anweisung #
Die break
Anweisung beendet die aktuelle Schleife und übergibt die Programmsteuerung an die Anweisung, die auf die beendete Anweisung folgt. Es wird normalerweise verwendet, um die Schleife zu beenden, wenn eine bestimmte Bedingung erfüllt ist.
Im folgenden Beispiel verwenden wir den if
Anweisung, um die Ausführung der Schleife zu beenden, sobald das aktuelle iterierte Element gleich „Lithium“ ist.
for element in Hydrogen Helium Lithium Beryllium; do
if [[ "$element" == 'Lithium' ]]; then
break
fi
echo "Element: $element"
done
echo 'All Done!'
Element: Hydrogen
Element: Helium
All Done!
continue
Anweisung #
Der continue
-Anweisung verlässt die aktuelle Iteration einer Schleife und übergibt die Programmsteuerung an die nächste Iteration der Schleife.
Im folgenden Beispiel iterieren wir durch einen Zahlenbereich. Wenn das aktuelle iterierte Element gleich „2“ ist, wird continue
-Anweisung bewirkt, dass die Ausführung zum Anfang der Schleife zurückkehrt und mit der nächsten Iteration fortfährt:
for i in {1..5}; do
if [[ "$i" == '2' ]]; then
continue
fi
echo "Number: $i"
done
Number: 1
Number: 3
Number: 4
Number: 5
Bash for
Schleifenbeispiele #
Dateien mit Leerzeichen im Dateinamen umbenennen #
Das folgende Beispiel zeigt, wie Sie alle Dateien im aktuellen Verzeichnis mit einem Leerzeichen im Namen umbenennen, indem Sie das Leerzeichen durch einen Unterstrich ersetzen:
for file in *\ *; do
mv "$file" "${file// /_}"
done
Lassen Sie uns den Code Zeile für Zeile aufschlüsseln:
- Die erste Zeile erstellt einen
for
Schleife und iteriert durch 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
zeigt das Ende des Loop-Segments an.
Änderung der Dateierweiterung #
Das folgende Beispiel zeigt, wie der Bash for
verwendet wird Schleife, um alle Dateien mit der Endung .jpeg im aktuellen Verzeichnis umzubenennen, indem die Dateierweiterung von .jpeg in .jpg ersetzt wird.
for file in *.jpeg; do
mv -- "$file" "${file%.jpeg}.jpg"
done
Analysieren wir den Code Zeile für Zeile:
- Die erste Zeile erstellt einen
for
Schleife und iteriert durch 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}
um den „.jpeg“-Teil aus dem Dateinamen zu entfernen, indem die Shell-Parametererweiterung verwendet wird done
zeigt das Ende des Loop-Segments an.
Schlussfolgerung #
Die Bash for
Schleife wird verwendet, um einen bestimmten Satz von Befehlen wiederholt für eine festgelegte Anzahl von Malen auszuführen.
Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.