while - 条件が真のときコマンドを繰り返す

while

Linuxでのwhile(bash)の使い方です。条件が真である間コマンドを繰り返すループの構文のひとつになります。

whileコマンドは例えば、ファイルをreadコマンドで一行ずつ読み込んで、処理するようなときに利用できます。

スポンサーリンク

whileの構文

基本的なwhileの構文

基本的なwhileのコマンド

基本的なwhileコマンドの構文は以下のようになります。

条件について、シェルでは0のときに真に、それ以外の時が偽になります。つまり、条件のコマンドの返り値が0のとき、コマンドが繰り返し実行されます。

シェルスクリプトでは

のようによく記述されます。

breakコマンドとcontinueコマンド

ループを制御するコマンドとして、breakコマンドとcontinueコマンドがあります。

breakコマンドはループを抜け出したいときに利用できます。

break.sh

実行結果

((...))は算術式を評価します。これはほとんどletコマンドと同じになります。((...))は最後に評価した式の値が0なら1(偽)を返し、それ以外なら0(真)を返します。

また、breakコマンドの引数に数値を取ることがその数値だけループを抜けることができます。

break2.sh

実行結果

continueコマンドはcontinueコマンドが実行された時点で次のループに移行するコマンドになります。

continue.sh

実行結果

また、continueコマンドも数値を引数に取ることができ、例えば、2重ループの場合に数値を指定することで最初のループから再開できます。

continue2.sh

実行結果

readコマンドと組み合わせる

readコマンドは標準入力から一行ずつ読み込み、その行を変数に代入できるコマンドになります。

readコマンドはユーザからの入力を変数に代入することができます。 また、オプションによって、「>」のような文字...

readコマンドはEOFを読み込むまで、基本的に終了ステータスは0のため、whileコマンドと組み合わせて利用し、行を読み込んで何か処理を行うのにとても便利な組み合わせです。

例えば、以下のスクリプトはeを含む行を表示する例になります。

read.sh

data.txt

実行結果

while文の展開されている内容を確認

setコマンドのxオプションをwhile文の展開されている内容を確認することができます。

「set -x」を用いた場合、そのトレースされている内容はデフォルトでは'+'の文字列が最初についた行で表されます。これは変数PS4を設定することで変更できます。

実行例

setコマンドの機能をオフしたい場合は

を使用すれば、元に戻すことができます。

スクリプトに対して、トレースを行いたい場合はbashコマンドでxオプションをつけて実行しても良いかもしれません。

実行例

参考

GNU Bash manual

スポンサーリンク