【bash】while文の使い方を解説します/while true doも解説
こんにちは。
普段はIT業界についてのブログを執筆してるエンジニアです。
» 参考:プログラマーの年収は200万円以下です【IT業界の残酷な成功法則】
» 参考:【一生使える本です】bashの解説書 厳選3選【おすすめ】
今回は、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によるループ処理
構文は次の通りです。
do
《繰り返し処理》
done
簡単な例
まずは簡単な例から。文字列変数command
は、whileループ1回目で”bye”が代入され、2回目で追記され”byebye”となり、先頭の条件を満たしてループを抜ける例を示します。
具体例
例:2回whileループした後に先頭の条件を満たし、ループを抜ける
#!/bin/bash while [ "$command" != "byebye" ] do command="bye$command" #ループの度に、先頭に文字列"bye"を追記する echo $command done
この例では1回目のwhileループで”bye”を出力、2回目のwhileループで”byebye”を出力、3回目の先頭でループを抜けます。
bye byebye
実践的な例
具体例
例:”bye”と打ち込むまで、打ち込まれた任意のコマンドを実行し続ける
#!/bin/bash command="pwd" #初期値として"pwd"をセット while [ "$command" != "bye" ] #"bye"と入力するまでループし続ける do echo "${command}を実行します" $command #"pwd"や"cd /tmp"など任意のコマンドを実行する read command #任意のコマンドの入力を受付ける done
この例ではスクリプティング上の制約があります。初期値としてpwd
を必ず実行しなくてはなりません。次項でこの制約を改善します。実行結果は以下の通りです。
pwdを実行します / cd /tmp cd /tmpを実行します pwd pwdを実行します /tmp ls lsを実行します file1.txt uname -n uname -nを実行します macbook1 bye
2.【while true do】whileの無限ループをbreakで抜ける
先ほどの例では、2行目に設定したpwd
をループの初回で実行しなくてはなりませんでした。こうせざるを得ないのは、ループの終了条件が冒頭(while [ "$command" != "bye" ]
)に設定されているためで、本項ではこの点をwhile true
を用いて改修します。
while true
は、無条件でループし続けることを意味します。その代わりに、ループ中に条件を満たした時だけbreak
コマンドを実行し、ループを抜けます。
具体例
例:”bye”と打ち込むまで、打ち込まれた任意のコマンドを実行し続ける
#!/bin/bash while true #条件のない無限ループ do read command [ "$command" == "bye" ] && break #"bye"と入力した時だけループを抜ける echo "${command}を実行します" $command done
実行結果は以下の通りです。
cd /tmp cd /tmpを実行します pwd pwdを実行します /tmp ls lsを実行します file1.txt uname -n uname -nを実行します macbook1 bye
今回は以上です。bashでwhileループを使う際の参考になりましたら幸いです。
Blog TOP シェルスクリプトを勉強したい人向け|bashの使い方 記事まとめ
bashの使い方 - もくじ
シェルとは
- シェルとは
- シェルはOSと会話するための言語
- シェルの種類(bash以外のシェル)
- シェルスクリプトとは
- シェルスクリプトの書き方条件式
- if else文
- 文字列の比較
- &&と||の使い方
- case文文字列操作
- 文字列の連結
- 文字列の一部を切り出す繰り返し
- for文
- while文
- while文でリストから1つ要素ずつ処理する定数
- 定数の定義
関数
- 関数の定義
デバッグ
実行権限
本
「今の会社を辞めて転職します。エンジニア職に強みのあるおすすめの転職サイト・転職エージェントを教えて欲しい。また好条件で転職するにはどうすれば良いですか?」こんな悩みに答えます。 ITエンジニアに強いおすすめの転職サイト・転職エージェント3選 転職成功には強くてニューゲームが条件。どうやって実現する?