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

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


シェルスクリプト - 制御構文

WHILE


条件式が成立している間 (条件式の終了ステータスが0の場合)、 ループ処理を繰り返す。CASEと組み合わせてユーザ向けの本格的なアプリケーションプログラムを作成することが可能。ループを抜けるには break を用いても良い。詳しくは制御構造 break を参照。

■基本的な書式
条件付きループ処理1
while [ 条件式 ]
do
      ループ処理
done


■サンプルスクリプト
変数cntに0を代入して初期化した後、ループ処理に入る。cntが5未満(less than)の間は条件が成立しているので、ループが走る。cntが5になったら条件式が不成立となるのでループを抜けてexit。

※インクリメント処理
C、Javaなど他の言語と違い、 古いUnixシェルではインクリメントやデクリメントの簡略表記( i = i + 1 を i++ と表記する)が使えない。変数 int の値に1を足す場合は int++ や int = int + 1の変わりに int=`expr ${int} + 1` と表記する。


#!/bin/sh
cnt=0
while [ ${cnt} -lt 5  ]
do
    echo ${cnt}
    cnt=`expr ${cnt} + 1`
done  

実行結果
0
1
2
3
4



UNTIL

条件式が成立するまでの間 (条件式の終了ステータスが0以外の場合)、ループ処理を繰り返す。CASEと組み合わせてユーザ向けの本格的なアプリケーションプログラムを作成することが可能。ループを抜けるには break を用いても良い。詳しくは制御構造 break を参照。

■基本的な書式
条件付きループ処理2
until [ 条件式 ]
do
      ループ処理
done



■サンプルスクリプト
変数cntに10を代入して初期化した後、ループ処理に入る。cntが5未満(less than)の間は条件が成立しないので、ループが走る。cntが4になったら条件式が成立するのでループを抜けてexit。


#!/bin/sh
cnt=10
until [ ${cnt} -lt 5 ]
do
    echo ${cnt}
    cnt=`expr ${cnt} - 1`
done

実行結果
10
9
8
7
6
5