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コマンドはユーザからの入力を変数に代入することができます。 また、オプションによって、「>」のような文字を入力する前の文字列として追加し、ユーザに文字入力の要求を分かりやすくすることができます。

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

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

read.sh

data.txt

実行結果

 

 

 

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

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

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

実行例

 

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

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

 

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

実行例

 

 

 

参考

GNU Bash manual