制御構文 BREAK / CONTINUE
システム管理者 Unixパワーユーザのためのコマンドリファレンス

[ Linux / Unix リファレンスガイド ] ⇒ [ シェルスクリプト ] ⇒ [ 制御構文 BREAK / CONTINUE ]



制御構文 BREAK

ループを中止する。BREAKによってループ処理を抜ける。WHILE、UNTIL、SELECT、FORなどと併用する。

■while文での使用例

while [ 条件式 ]
do
     if [ 条件 ]
     then
          break
     else
          処理
     fi
done


■サンプルスクリプト
day_of_weekに曜日を代入し、ifで判定。月曜日~土曜日はjob 1からjob 10を実行しますが、日曜日のみ job 6 以降をキャンセルします。日時処理や週次処理などが想定されます。※if文の -a はANDで同時に満たしている場合。


#!/bin/sh
cnt=1
day_of_week=`date | awk '{print $1}'`

while [ $cnt -le 10 ]
do
   echo "job $cnt"
   if [ $day_of_week = Sun -a $cnt -eq 5 ]
   then
      break
   fi
   cnt=`expr $cnt + 1`
done

■出力結果(月曜日~土曜日の場合)
job 1
job 2
job 3
job 4
job 5
job 6
job 7
job 8
job 9
job 10

■出力結果(日曜日の場合)
job 1
job 2
job 3
job 4
job 5



制御構文 CONTINUE

FOR・WHILE・UNTILなどのループでCONTINUEを用いると処理をキャンセルし、ループの先頭から処理を再開する。その際、変数は次の引数が代入されることに注意。。

■FOR文での使用例
もし引数にあるファイルが存在する場合は continue により処理をキャンセル、次の引数を変数にセットし、ループを再開。もし、引数にあるファイルが存在しなければ 処理A → 処理B → 処理C と順次実行していく。


for var in 引数1 引数2 引数3 ・・・ 引数n
do
     if [ -e ${var} ]
     then
          continue
     fi
     処理A 
     処理B 
     処理C 
done 

■サンプルスクリプト
変数 var に1~5が代入されていくが、varの値が3の時は処理をキャンセルし、4以降を再開する例。


#!/bin/sh

for var in 1 2 3 4 5
do
   if [ $var -eq 3 ]
   then
      continue
   fi
   echo "job $var"
done

■出力結果
job 1
job 2
job 4
job 5