Unix / Linux-Shell ループ制御

この記事では、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
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です