シェルスクリプトは、UNIX系のオペレーティングシステムでシステム管理やタスクの自動化を行うための強力なツールです。
その中で、ループ処理を行うために使われるwhile文は非常に重要です。
この記事では、シェルスクリプトにおけるwhile文の基本的な使い方と実用的な例について解説します。
目次
while文の書き方
while文の基本構文は次の通りです。
while [ 条件式 ]
do
# 条件式が真の場合に実行されるコマンド
done
- [ 条件式 ]:条件式が真である限り、doとdoneの間にあるコマンドが繰り返し実行されます。
- do:ループの開始を示します。
- done:ループの終了を示します。
条件式の書き方
条件式には、testコマンドや[](角括弧)を用います。
条件式が真であれば、ループ内のコマンドが実行され続けます。条件式が偽になると、ループが終了します。
条件式については、さまざまな式があるためこの記事で網羅的に紹介はしませんが、いくつか例を取り上げて説明します。
カウントアップを行うサンプルスクリプト
#!/bin/bash
count=1
while [ $count -le 5 ]
do
echo "Count is $count"
((count++))
done
上記のサンプルスクリプトを実行すると、以下のような出力を得ます。1から5までの数字をカウントしていることがわかります。
countの値が 6 になるとループが終了します。
- [$count -le 5]:条件式です。\$countの値が5以下であるかを判定します。-leは「less than or equal to」の略で、「以下」という意味です。
[
と]
は条件式を囲むための記号です。 - echo “Count is \$count”: countの現在の値を表示します。\$countは変数の値を展開する記号です。
- ((count++)): countの値を1増やします。(( ))は算術演算を行うための構文です。++はインクリメント演算子で、変数の値を1増やすことを意味します。
ユーザーからの入力を待つサンプルスクリプト
このスクリプトは、ユーザーに「yes」または「no」を入力するように促し、入力された値に基づいて処理を続行するか終了するかを決定します。
#!/bin/bash
while true
do
read -p "Enter 'yes' to continue or 'no' to quit: " userInput
if [ "$userInput" = "no" ]; then
echo "Exiting..."
break
elif [ "$userInput" = "yes" ]; then
echo "Continuing..."
else
echo "Invalid input. Please enter 'yes' or 'no'."
fi
done
userInputが「no」と等しい場合、以下の処理を実行します。
- 「Exiting…」と表示します。
- breakステートメントを実行して、whileループを終了します。
まとめ
シェルスクリプトにおけるwhile文は、条件が真である間に繰り返し処理を行うための基本的なループ構造です。
簡単なカウントアップから、ユーザーの入力を待つインタラクティブなスクリプトまで、多くのシナリオで利用されます。
シェルスクリプトの基本を押さえて、より複雑なタスクの自動化に挑戦してみてください!