お久しぶりです。KWです。
シェルスクリプト第5弾です。それでは紹介していきます。

その前にシェルスクリプトとはなんぞや?の人は
1課の技術書 シェルスクリプト編の記事を参考にしてください。

■while構文について

今回はwhile構文という制御構文について紹介します。
while構文は簡単に説明するとリストを実行してループする構文です。
ん、for構文もループするような、、、と気付いたそこのあなた!
あとで説明しますので焦らずに一休み一休み。
制御構文については1課の技術書 シェルスクリプト編 その3の「制御構文について」という項目で紹介しています。
ご参考までに。

以下がまず通常のスクリプトの動きだとします。

以前に紹介したfor構文は以下です。
詳細は1課の技術書 シェルスクリプト編 その4を見てください。
for構文はリスト1~3に対して、処理1~2をするまで終わることが出来ない動きになっています。

while構文になると以下の処理の動き方になります。
詳細はこの後で説明しますのでご安心ください。
for構文よりだいぶシンプルで見やすいですね。

図を見てわかるように条件式を満たしている限り、青い矢印に進み、
条件式を満たさなくなったら処理が完了する動きになります。

■while構文とfor構文の違い

while構文とfor構文の違いを簡単にまとめました。

for構文はリストに基づいて処理を行いますが、
while構文は条件式に基づいて処理を行います。

感覚的に例えるならば、for構文が「ドラゴンボールを7個全部集めれば終わり」みたいなイメージです。
漫画ドラゴンボールだとその後、宇宙人が地球に攻めてきたり、人造人間が世界征服を企んでたりして話が続きますが、ドラゴンボールを7個のリスト全部集めるというスクリプトの書き方にすると誰が何と言おうと終わりは終わりです。

対してwhile構文は「アンパンマンがバイキンマンに倒されるまで終わらない」みたいな話です。
アンパンマンは毎回顔を汚されてしまったり、濡れて力が入らなくなってしまったりでピンチになりますがジャムおじさんなどの仲間の援護を受け、46年間アンパンマンワールドの平和を維持しています。
ちなみに、アニメシリーズが始まったのが1979年3月13日だそうです。人間で46歳はスポーツ選手だったら既に引退していてもおかしくないレベルですね。

上記で説明した通り、for構文はループする回数がリストに基づいて 決まっています。
対してwhile構文は条件を満たしている限り、ループし続けます。下手してミスったらエンドレスで実行し続けるので物理的には壊れないかもですが、CPUなどのリソース処理が重くなります。

「(下手したら)ヤツはもうどこへも向かうことはない。特にヤツが『真実』に到達することは決して…….(以下省略)」すみません。言いたかっただけです。
とりあえず、終わりのないのが『終わり』。それが『ゴールド・E・レクイエム』なのです。

上記でwhile構文について、どんな動きなのか紹介しましたが基本的な書式は以下になります。

上記を踏まえた上で今回もwhile構文のスクリプトを用意しました。
このスクリプトを使って一文ずつKWなりに説明していきたいと思います。

「loop_counter」という変数の箱に0を設定します。
0を設定することで0から1,2,3と順番に数えてくれます。

ここからはwhile構文のメインディッシュでもある条件式です。
whileという文字が見えたらwhile構文だ!と身構えてください。
また、それぞれの文字を紐解いていくと以下になります。
英語の文法と一緒です。

上記の内容より、「loop_counterの箱が5より小さい場合はループを繰り返す」という意味になります。

doは「~する」という英語の意味なので冒頭で説明したループの始まりの合図です。
どんな動きになるかは以下になります。

冒頭で説明した「処理その1」の動きになります。
「loop_counter」という変数の箱の現在の値をechoコマンドで表示させます。

「処理その2」の動きになります。
「loop_counter」という変数の箱の値を1増やします。

doneは英語で「~した」という意味になり、ループの終わりの合図です。

これらを踏まえた上で実行したのが以下の出力結果になります。
ファイル名は「hogehoge3.sh」という名前にしました。特に意味はありません。

きちんと0から4までの数値が出力されました。

■最後に

皆さんいかがでしたか。
今回はシェルスクリプトのwhile構文について紹介させていただきました。

while構文はfor構文より下準備が少なくシンプルな動きで分かりやすいと思いますが違いについても話したように、ちょっとミスるとエンドレスになってしまいます。
そこは現場でも注意していきたいなと思いました。

それではまた会いましょう。

The following two tabs change content below.

KW

一度IT業界から離れましたが再挑戦しました。まだまだ学ぶことが多く日々業務に奮闘中。好きなものはラーメン、野球、自転車、散歩、猫です。時々一人自転車で遠出をして自然のある風景に私の心の飢えを癒すのが好きです。