ループを使用すると、特定の条件が満たされるまで、1つ以上のコマンドを複数回実行できます。ただし、ループのフローを変更してループを終了するか、現在の反復のみを終了する必要がある場合があります。
Bashでは、break およびcontinue ステートメントを使用すると、ループの実行を制御できます。
break ステートメント#
break ステートメントは現在のループを終了し、終了したループに続くコマンドにプログラム制御を渡します。 forを終了するために使用されます 、while 、until 、またはselect loop.s breakの構文 ステートメントは次の形式を取ります:
break [n]
[n] はオプションの引数であり、1以上である必要があります。[n]の場合 が指定されている場合、n番目の囲みループが終了します。 break 1 breakと同等です 。
breakの使用方法をよりよく理解するため ステートメント、次の例を見てみましょう。
以下のスクリプトでは、whileの実行 現在の反復アイテムが2に等しくなると、ループが中断されます :
i=0
while [[ $i -lt 5 ]]
do
echo "Number: $i"
((i++))
if [[ $i -eq 2 ]]; then
break
fi
done
echo 'All Done!'
Number: 0
Number: 1
All Done!
breakの使用例を次に示します。 ネストされたfor内のステートメント ループします。
引数[n]の場合 与えられていない、break 最も内側の囲みループを終了します。外側のループは終了していません:
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
echo 'All Done!'
j: 1
i: 1
j: 1
i: 2
j: 1
i: 3
All Done!
外側のループを終了する場合は、break 2を使用します 。引数2 breakに通知します 2番目の囲みループを終了するには:
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 'All Done!'
j: 1
All Done!
continue ステートメント#
continue ステートメントは、現在の反復の囲んでいるループの本体内の残りのコマンドをスキップし、プログラム制御をループの次の反復に渡します。
continueの構文 ステートメントは次のとおりです。
continue [n]
[n] 引数はオプションであり、1以上にすることができます。[n]の場合 が与えられると、n番目の囲みループが再開されます。 continue 1 continueと同等です 。
以下の例では、現在の反復アイテムが2に等しくなると 、continue ステートメントにより、実行はループの最初に戻り、次の反復を続行します。
i=0
while [[ $i -lt 5 ]]; do
((i++))
if [[ "$i" == '2' ]]; then
continue
fi
echo "Number: $i"
done
echo 'All Done!'
Number: 1
Number: 3
Number: 4
Number: 5
All Done!
次のスクリプトは、1から数値を出力します 50まで 9で割り切れる 。
数値が9で割り切れない場合 、continue ステートメントはechoをスキップします コマンドを実行し、ループの次の反復に制御を渡します。
for i in {1..50}; do
if [[ $(( $i % 9 )) -ne 0 ]]; then
continue
fi
echo "Divisible by 9: $i"
done
Divisible by 9: 9
Divisible by 9: 18
Divisible by 9: 27
Divisible by 9: 36
Divisible by 9: 45
結論#
ループはプログラミング言語の基本的な概念の1つです。 Bashなどのスクリプト言語では、ループは反復的なタスクを自動化するのに役立ちます。
break ステートメントは、現在のループを終了するために使用されます。 continue ステートメントは、ループの現在の反復を終了し、次の反復を開始するために使用されます。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。