シェルでループ処理でcontinue

シェルでループ処理でcontinue

シェルスクリプトでcontinueを使ってループ処理を制御することができます。
continueは、ループ内で実行される処理をスキップして次のループの反復(イテレーション)に進むためのコマンドです。
continueが呼ばれると、ループの残りの部分は実行されずに、次のループの反復が開始されます。

以下は、forループとwhileループの両方でcontinueを使用する例です。

1. forループでのcontinueの例

次のスクリプトでは、1から5までの数字をループで処理していますが、3のときだけ処理をスキップし、他の数字についてはメッセージを表示します。

#!/bin/bash

for i in {1..5}
do
  if [ "$i" -eq 3 ]; then
    continue  # 3のときは処理をスキップ
  fi
  echo "Number: $i"
done

このスクリプトを実行すると、次の出力が得られます。

Number: 1
Number: 2
Number: 4
Number: 5

3のときにはcontinueが実行され、echoコマンドがスキップされていることがわかります。

2. whileループでのcontinueの例

次のスクリプトでは、whileループを使って1から5までの数字を処理していますが、3のときだけ処理をスキップします。

#!/bin/bash

i=1
while [ $i -le 5 ]
do
  if [ "$i" -eq 3 ]; then
    i=$((i + 1))
    continue  # 3のときは処理をスキップ
  fi
  echo "Number: $i"
  i=$((i + 1))
done

このスクリプトを実行すると、次の出力が得られます。

Number: 1
Number: 2
Number: 4
Number: 5

3のときにcontinueが実行され、echoコマンドがスキップされています。

3. ネストされたループでのcontinueの使い方

複数のループがネストされている場合、continueはデフォルトで最も内側のループの次の反復に進みます。
しかし、Bashではcontinue NのようにNを指定して、どのループをスキップするかを制御することもできます。

#!/bin/bash

for i in {1..3}
do
  echo "Outer loop: $i"
  for j in {1..3}
  do
    if [ "$j" -eq 2 ]; then
      continue 2  # 外側のループの次の反復に進む
    fi
    echo "  Inner loop: $j"
  done
done

このスクリプトを実行すると、次の出力が得られます。

Outer loop: 1
Outer loop: 2
Outer loop: 3

j=2のときにcontinue 2が実行され、外側のループの次の反復に直接移行します。

このように、continueを使うことでループの中で特定の条件に応じて処理をスキップし、効率的なループ制御を行うことができます。