【bash】while文の使い方を解説します【無限ループの使い方】

bash

bashのwhileループについて調べる人

bashのwhileループについて調べる人
「bashでwhile文を使用した無限ループを実装したいのですが、使い方を忘れてしまいました。正しい方法を知りたいのと、コピペできるソースコード例も欲しいです。」

こんな悩みを解決します。

bashのwhile文は、条件付きの無限ループ処理を行いたい時に用いるフレーズです。ある条件を満たした時だけ、ループを脱します。

余談ですが、10回・100回などあらかじめ定められた有限ループをしたい場合にはfor〜in文を用います。
参考:【bash】for〜inループの使い方を解説

また、外部ファイルから1行ずつ読み込みたい場合には、while read 《変数》文を用います。これについては以下のリンク先で解説していますのでご覧ください。
参考:【bash】while read lineの使い方を解説します

本記事の内容

  • 1.whileによる無限ループ
  • 2.whileループをbreakで抜ける

この記事を書いている私はIT業界歴12年、年収1,000万円ちょっとの金融系エンジニアです。IRIXやSolarisなどのUnixやCygwin、mac、Linuxなど様々な環境でbashによるスクリプティングを行ってきました。

bashは極めて簡単なプログラミング言語ですが、空白の有無などで構文エラーとなること、javaなど一般的なプログラミング言語に慣れている方にとっては直感的ではない構文であることから、忘れてしまうことも多いかと思います。

あと、Qiitaとかに入門者が書いたメモの記事ですと、構文が間違っているケースがあり、少し複雑な文字列の処理ですとエラーとなってしまう書き方も散見されますので、正しい情報を発信したいと思い、記事にしました。

また本記事では、細かい構文に迷ったら、例からコピー&ペーストして使えることも目指しました。少しでもお役に立てますと幸いです。

1.whileによる無限ループ

bashのfor〜inループを使用する

構文は次の通りです。

while 《ループ条件》
do
《繰り返し処理》
done

簡単な例

まずは簡単な例から。文字列変数commandは、whileループ1回目で”bye”が代入され、2回目で追記され”byebye”となり、先頭の条件を満たしてループを抜ける例を示します。

具体例

例:2回whileループした後に先頭の条件を満たし、ループを抜ける

この例では1回目のwhileループで”bye”を出力、2回目のwhileループで”byebye”を出力、3回目の先頭でループを抜けます。

実践的な例

具体例

例:”bye”と打ち込むまで、打ち込まれた任意のコマンドを実行し続ける

この例ではスクリプティング上の制約があります。初期値としてpwdを必ず実行しなくてはなりません。次項でこの制約を改善します。実行結果は以下の通りです。

2.whileループをbreakで抜ける

whileループをbreakで抜ける

先ほどの例では、2行目に設定したpwdをループの初回で実行しなくてはなりませんでした。こうせざるを得ないのは、ループの終了条件が冒頭(while [ "$command" != "bye" ])に設定されているためで、本項ではこの点をwhile trueを用いて改修します。

while trueは、無条件でループし続けることを意味します。その代わりに、ループ中に条件を満たした時だけbreakコマンドを実行し、ループを抜けます。

具体例

例:”bye”と打ち込むまで、打ち込まれた任意のコマンドを実行し続ける

実行結果は以下の通りです。

 

今回は以上です。bashでwhileループを使う際の参考になりましたら幸いです。