この記事では、UnixでのShellループ制御について説明します。 今まで、ループの作成とループを使用したさまざまなタスクの実行について習得しました。 ループを停止したり、ループの反復をスキップしたりする必要がある場合があります。
この記事では、Shellループを制御するために使用される次の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コマンドは、次の形式を使用してネストされたループを終了することもできます。
break n
nはn番目の閉ループを終了することを指定します。
実例
以下のは、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に等しい場合、このスクリプトは2つのループを終了します。
#!/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
コマンドに似ていますが、ループ全体ではなく、ループの現在の反復を終了させます。
このステートメントは、エラーが発生したが、ループの次の反復を実行しようとする場合に役立ちます。
構文
continuebreakステートメントと同じ、continueコマンドに整数パラメータを指定して、ネストされたループからコマンドをスキップできます。
breakステートメントと同じ、continueコマンドに整数パラメータを指定して、ネストされたループからコマンドをスキップできます。
continue n
n
は、続行するn番目の閉ループを指定します。
実例
次のループは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
コメントを残す