本文へスキップ
BecomeCoder

シェルスクリプトコース · 第5章 繰り返し · レッスン22

break と continue ― ループを抜ける・飛ばす

ブラウザで完結

導入

「見つかったらそこで終わりにしたい」「この条件のときだけ処理を飛ばしたい」。ループを最後まで律儀に回す必要はありません。breakcontinue で、流れを自分でコントロールします。

説明

  • break … ループをその場で抜ける
  • continue … 残りの処理を飛ばして、次の周回へ進む
#!/bin/bash

echo "=== continue: 2 だけ飛ばす ==="
for i in 1 2 3 4; do
  if [ "$i" -eq 2 ]; then
    continue
  fi
  echo "処理: $i"
done

echo "=== break: 3 で打ち切る ==="
for i in 1 2 3 4; do
  if [ "$i" -eq 3 ]; then
    echo "3 を見つけたので終了"
    break
  fi
  echo "確認: $i"
done
flowchart TD
    A["ループの先頭"] --> B["処理"]
    B --> C{"continue の条件?"}
    C -->|"はい"| A
    C -->|"いいえ"| D{"break の条件?"}
    D -->|"はい"| E["ループを抜ける"]
    D -->|"いいえ"| F["残りの処理"]
    F --> A

break の代表的な使いどころは 「探して、見つけたら止める」 です。1000件のログから最初のエラーを見つけたら、残り999件を見る必要はありません。

until という構文もあります。while の逆で、条件が成り立つまで繰り返します。

until [ -f done.flag ]; do
  echo "完了を待っています"
  break
done

while [ ! 条件 ]until [ 条件 ] は同じ意味です。読んで自然なほうを選べば構いません。

やってみよう

スクリプトを実行して、continue では 2 だけが飛ばされること、break では 3 以降がまったく処理されないことを見比べましょう。次に breakcontinue に書き換えて実行すると、4 まで処理が続くことが分かります。この違いが、そのまま2つの役割の違いです。

演習

for i in 1 2 3 4 5 のループで、i が 4 になったら break で打ち切り、打ち切りました と表示してください。

ヒント1を見る

if [ "$i" -eq 4 ]; then の中で echo してから break します。

ヒント2を見る

if [ "$i" -eq 4 ]; then echo "打ち切りました"; break; fi

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

シェルスクリプト(シミュレート)

スクリプトを書くエディタと、それを動かす仮想シェルを読み込みます(本物のbashではなく、動きを再現した学習用の環境です)。
スクロールして表示された時点でも自動で読み込まれます。