Unix-loop-control

提供:Dev Guides
移動先:案内検索

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