Table of Contents
whileループ
このページでは while文 について説明します。while文はfor文と違い、処理を繰り返す回数が決まっていない場合に役立ちます。例えば、ある文字が入力されるまで繰り返し文字を入力させたい、といった場合です。
while文
while文の構文は次のようになります。while と書いた後に半角スペースを置き、その後に :(コロン)を書きます。
#!/bin/bash while : do 処理 done
while文もfor文と同じように break や continue を使うことができます。次の例は、文字列 “exit” が入力されるまで、文字列を入力させてそれを表示するシェルスクリプトです。
#!/bin/bash while : do read -p "文字列を入力してください: " string if [ ${string} == "exit" ] then break fi echo ${string} done
実行結果
文字列を入力してください: 123
123
文字列を入力してください: abc
abc
文字列を入力してください: test
test
文字列を入力してください: exit
123
文字列を入力してください: abc
abc
文字列を入力してください: test
test
文字列を入力してください: exit
無限ループ
もし、上の例のシェルスクリプトで break を書かなかった場合、処理が永遠に終わりません。この状態を無限ループといい、他の操作が全くできなくなってしまいます。誤って無限ループを実行してしまった場合は ctrl + C でループを中断してください。
条件を設定してループ
while文もif文と同じく数値や文字列の比較を条件として使うことができます。条件が満たされている間、ループを実行します。そのときの構文は次のようになります。先ほど説明した条件を設定しないwhile文では break が必要でしたが、この場合は必須ではありません。
whileループの書式
#!/bin/bash while [ 条件 ] do 処理 done
または
#!/bin/bash while ((条件)) do 処理 done
次の例は、指定した回数だけループ処理を実行する例です。
#!/bin/bash val=0 #初期値0を代入しておく read -p "処理を繰り返す回数を入力してください: " count # val の値が count より小さい間、while内の処理を実行し続ける while ((${val} < ${count})) do val=$((val + 1)) #変数valに1を足す echo "${val}回目の処理です" done
練習問題
while文を使って、以下の条件を満たすシェルスクリプトを作ってください。
- 実行すると「数値を入力してください(exitで終了): 」と入力を促すメッセージが表示される。
- “exit” と入力するまでの間に入力した数値の平均値を表示する
答えの例(クリックで開く)
#!/bin/bash while : do read -p "数値を入力してください(exitで終了): " val if [ ${val} == "exit" ] then break fi count=$((count + 1)) #入力された数字の個数 summation=$((summation + val)) #入力された数値の合計値 done average=$((summation / count)) #平均値の計算 echo "平均値は${average}です"