今までシェルでループ処理をする場合、for 文を使う機会が非常に多かったのですが、特定の条件の間だけ処理を繰り返すには while 文が最適です。
今回は、while 文の使い方と使えるシチュエーションについて紹介していきます。
whileの基本構文
while の基本構文は以下の通りです。
1 2 3 | while [条件式]; do 処理 done |
条件の後の「セミコロン」と「do」については、「do」の前で改行して以下のように書くこともできます。
1 2 3 4 | while [条件式] do 処理 done |
書き方は好みによりけりなので、自分の中で統一するかプロジェクトに合わせるようにするといいですね。
条件式の書き方
例えば、5 回処理を繰り返したい場合は、整数型の変数 i を 1 で初期化しておき、条件式に i が 6 より小さい間と定義します。
if 文と同じように条件式は [] で囲みます。
1 2 3 4 5 6 7 8 | #!/bin/sh declare -i i=1 while [ i -lt 6 ]; do echo "i: ${i}" i=i+1 done |
結果は以下の通り。
1 2 3 4 5 | i: 1 i: 2 i: 3 i: 4 i: 5 |
ちなみに条件式に使う [ ですが、実はこれ単体で Linux のコマンドって知ってましたか?
それぞれの括弧の使い方については、下記のサイトに詳しく書かれていますので興味があれば見てください。
ファイルを1行ずつ最後まで読み込みたい
また、以前紹介した「シェルスクリプトでファイルを1行ずつ読み込む」でも書いた通り while 文が活躍します。

シェルスクリプトでファイルを1行ずつ読み込むシェルスクリプトで、ファイルに書かれた内容を 1 行ずつ処理したいケースってたまにありますよね。
いくつか方法はあるのですが、ファイル...
この場合は標準入力から読み込む read コマンドを使います。
1 2 3 | while read line; do echo ${line} done < ファイル |
read コマンドについては下記で確認してみてください。