シェルスクリプトで行うループ処理(その2)

2016年8月1日(更新: 2018年1月4日)

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

無限ループ

もし、上の例のシェルスクリプトで 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}です"
    

コメントを残す

メールアドレスが公開されることはありません。