Unix-loop-control
Unix/Linux-シェルループ制御
この章では、Unixでのシェルループ制御について説明します。 これまで、ループの作成とループを使用したさまざまなタスクの実行について見てきました。 ループを停止したり、ループの繰り返しをスキップしたりする必要がある場合があります。
この章では、シェルループの制御に使用される次の2つのステートメントについて学習します。
- break ステートメント
- continue ステートメント
無限ループ
すべてのループの寿命は制限されており、ループに応じて条件がfalseまたはtrueになると出力されます。
必要な条件が満たされない場合、ループは永遠に続く可能性があります。 終了せずに永久に実行されるループは、無限の回数実行されます。 このため、このようなループは無限ループと呼ばれます。
例
以下は、 while ループを使用して、0から9までの数字を表示する簡単な例です-
#!/bin/sh
a=10
until [ $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
このループは、 a が常に*より大きい*または 10 であり、10未満になることはないため、永遠に続きます。
breakステートメント
*break* ステートメントは、breakステートメントまでのすべてのコード行の実行を完了した後、ループ全体の実行を終了するために使用されます。 次に、ループの終わりに続くコードにステップダウンします。
構文
次の break ステートメントは、ループから抜け出すために使用されます-
break
ブレークコマンドは、この形式を使用してネストされたループを終了するために使用することもできます-
break n
ここで、 n は、出口へのループを囲む n ^ th ^ を指定します。
例
*a* が5になるとすぐにループが終了することを示す簡単な例を次に示します-
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a
if [ $a -eq 5 ]
then
break
fi
a=`expr $a + 1`
done
実行すると、次の結果が表示されます-
0
1
2
3
4
5
ネストされたforループの簡単な例を次に示します。 var1が2 に等しく、 var2が0 に等しい場合、このスクリプトは両方のループから抜け出します-
#!/bin/sh
for var1 in 1 2 3
do
for var2 in 0 5
do
if [ $var1 -eq 2 -a $var2 -eq 0 ]
then
break 2
else
echo "$var1 $var2"
fi
done
done
実行すると、次の結果が表示されます。 内側のループには、引数2を持つbreakコマンドがあります。 これは、条件が満たされた場合、外側のループから抜け出し、最終的には内側のループから抜け出す必要があることを示しています。
1 0
1 5
continueステートメント
*continue* ステートメントは *break* コマンドに似ていますが、ループ全体ではなく、ループの現在の反復を終了する点が異なります。
このステートメントは、エラーが発生したが、ループの次の反復を実行しようとする場合に役立ちます。
構文
continue
breakステートメントと同様に、整数引数をcontinueコマンドに指定して、ネストされたループからコマンドをスキップできます。
continue n
ここで、 n は、継続する n ^ th ^ を含むループを指定します。
例
次のループは、continueステートメントから戻り、次のステートメントの処理を開始する continue ステートメントを使用します-
#!/bin/sh
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
Q=`expr $NUM % 2`
if [ $Q -eq 0 ]
then
echo "Number is an even number!!"
continue
fi
echo "Found odd number"
done
実行すると、次の結果が表示されます-
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number