この章では、Unixにおけるシェルループ制御について説明します。これまでは、ループを作成し、ループを使ってさまざまなタスクを実行する方法を検討しました。場合によっては、ループを停止するか、ループの繰り返しをスキップする必要が条件によっては必要となってきます。
この章では、シェル・ループを制御するために使用される2つのステートメント、
- ブレークステートメント
- コンテニューステートメント について説明していきます。
無限ループ
すべてのループの寿命は限られており、ループに応じて条件が偽または真であると出てきます。
必要な条件が満たされない場合、ループは永遠に続くことがあります。終了せずに永久に実行するループは、無限回数実行されます。このため、このようなループを無限ループと呼びます。
例
whileループを使ってゼロから9までの数字を表示する簡単な例を以下に示します。
#!/bin/sh a=10 until [ $a -lt 10 ] do echo $a a=expr $a + 1` done
上記のように実行ができます
breakステートメント
ブレーク文はbreak文までのコードの行のすべての実行が完了した後、全体のループの実行を終了するために使用されます。その後、ループの最後に続くコードにステップダウンします。
構文
次のbreak文は、ループから出てくるために使用されます。
break
breakコマンドを使用して、この形式を使用してネストされたループを終了することもできます。
break n
例
ここではブレーク文の簡単な説明をしています。ちなみに-ltはless thanつまりは未満 -eq qpual イコールですよ。
#!/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ループの簡単な例を示します。 –
#!/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引数に整数引数を指定すると、ネストされたループからコマンドをスキップできます。
continue 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