Die Anweisungen break und continue steuern den Ablauf von Schleifen in Bash-Skripten. Mit break beendest du eine Schleife vorzeitig, mit continue überspringst du die aktuelle Iteration und springst direkt zur nächsten.
Beide Anweisungen funktionieren in allen Schleifentypen: for, while, until und select.
Die break-Anweisung
Mit break verlässt du eine Schleife sofort. Die Ausführung springt zum ersten Befehl nach der Schleife.
Syntax
break [n]
Das optionale Argument n gibt an, wie viele umschließende Schleifen beendet werden sollen. Ohne Angabe (oder mit n=1) wird nur die innerste Schleife verlassen.
Einfaches Beispiel
Das folgende Skript zählt hoch, bricht aber ab, sobald der Zähler den Wert 2 erreicht:
i=0
while [[ $i -lt 5 ]]; do
echo "Zahl: $i"
((i++))
if [[ $i -eq 2 ]]; then
break
fi
done
echo "Fertig"
Ausgabe:
Zahl: 0
Zahl: 1
Fertig
Die Schleife läuft nur zweimal, obwohl die Bedingung $i -lt 5 noch lange erfüllt wäre.
break in verschachtelten Schleifen
Bei verschachtelten Schleifen beendet break standardmäßig nur die innerste Schleife:
for i in {1..3}; do
for j in {1..3}; do
if [[ $j -eq 2 ]]; then
break
fi
echo "j: $j"
done
echo "i: $i"
done
Ausgabe:
j: 1
i: 1
j: 1
i: 2
j: 1
i: 3
Die innere Schleife bricht bei j=2 ab, aber die äußere Schleife läuft weiter.
Mehrere Schleifenebenen verlassen
Mit break 2 verlässt du zwei Schleifenebenen auf einmal:
for i in {1..3}; do
for j in {1..3}; do
if [[ $j -eq 2 ]]; then
break 2
fi
echo "j: $j"
done
echo "i: $i"
done
echo "Fertig"
Ausgabe:
j: 1
Fertig
Das Skript beendet beide Schleifen sofort, wenn j=2 erreicht wird. Die Zeile echo "i: $i" wird nie ausgeführt.
Die continue-Anweisung
Mit continue überspringst du den Rest der aktuellen Iteration und springst direkt zum nächsten Schleifendurchlauf.
Syntax
continue [n]
Das optionale Argument n funktioniert wie bei break: Es gibt an, in welcher umschließenden Schleife die nächste Iteration beginnen soll.
Bestimmte Werte überspringen
Das folgende Skript gibt alle Zahlen von 1 bis 5 aus, überspringt aber die 2:
i=0
while [[ $i -lt 5 ]]; do
((i++))
if [[ $i -eq 2 ]]; then
continue
fi
echo "Zahl: $i"
done
Ausgabe:
Zahl: 1
Zahl: 3
Zahl: 4
Zahl: 5
Bei i=2 springt continue zurück zum Schleifenanfang. Der echo-Befehl wird für diesen Wert nicht ausgeführt.
Nur bestimmte Werte verarbeiten
continue eignet sich gut, um Werte herauszufiltern. Das folgende Skript gibt nur Zahlen aus, die durch 9 teilbar sind:
for i in {1..50}; do
if [[ $(( i % 9 )) -ne 0 ]]; then
continue
fi
echo "Teilbar durch 9: $i"
done
Ausgabe:
Teilbar durch 9: 9
Teilbar durch 9: 18
Teilbar durch 9: 27
Teilbar durch 9: 36
Teilbar durch 9: 45
Alle Zahlen, die nicht durch 9 teilbar sind, werden übersprungen.
Wann verwendest du was?
break: Wenn eine Bedingung eintritt, nach der die Schleife nicht mehr weiterlaufen soll. Beispiel: Suche nach einem Wert in einer Liste abbrechen, sobald er gefunden wurde.
continue: Wenn bestimmte Werte oder Bedingungen übersprungen werden sollen, die Schleife aber weiterlaufen muss. Beispiel: Leere Zeilen in einer Datei ignorieren.
Zusammenfassung
Mit break beendest du Schleifen vorzeitig, mit continue überspringst du einzelne Iterationen. Beide Anweisungen akzeptieren ein optionales Argument n, um bei verschachtelten Schleifen die Ebene anzugeben.