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.