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 常に greater than または equal to 10 そしてそれは決して10以上です。

ブレークステートメント

ザ・ breakステートメントは、breakステートメントまでのすべてのコード行の実行を完了した後、ループ全体の実行を終了するために使用されます。次に、ループの終了後にコードにステップダウンします。

構文

以下 break ステートメントはループから抜け出すために使用されます-

break

breakコマンドを使用して、この形式を使用してネストされたループを終了することもできます。

break n

ここに n を指定します nth からの出口への囲みループ。

これは、ループがすぐに終了することを示す簡単な例です。 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 equals 2 そして var2 equals 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 ステートメントはに似ています break ただし、ループ全体ではなく、ループの現在の反復を終了させます。

このステートメントは、エラーが発生したが、ループの次の反復を実行しようとする場合に役立ちます。

構文

continue

breakステートメントと同様に、整数引数をcontinueコマンドに指定して、ネストされたループからコマンドをスキップできます。

continue n

ここに n を指定します nth 続行するループを囲みます。

次のループはを利用します 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