Linuxで繰り返し処理を実現!whileコマンドの使い方と実例解説

Linuxを使っていると、「特定の処理を何度も繰り返したい」と思うことはよくあります。そんなときに役立つのが、シェルスクリプトで使える「while」ループです。while文を使うことで、条件を満たす限り処理を繰り返すことができ、自動化や定期的な監視、処理のループに大変便利です。本記事では、Linuxにおけるwhile文の基本構文から、具体的な使用例、注意点までをわかりやすく解説していきます。コマンドライン初心者から中級者まで役立つ内容となっていますので、ぜひ参考にしてください。


while文とは?Linuxでの基本構文

while文は、指定した条件が真(true)である間、指定した処理を繰り返し実行する制御構文です。構文は以下のようになります。

while [ 条件 ]
do
コマンド1
コマンド2
...
done

または、条件の代わりにコマンドの実行結果を使って制御する書き方もよく使われます。

while コマンド
do
繰り返す処理
done

doの中で書かれた処理がループとして実行されます。条件がfalseになった時点でループは終了します。


実際に使ってみよう!基本的なwhileの使用例

それでは、実際にLinuxのターミナルで使える簡単な例を見てみましょう。

例1:カウントアップするスクリプト

#!/bin/bash

count=1
while [ $count -le 5 ]
do
echo "カウント:$count"
count=$((count + 1))
done

このスクリプトを実行すると、「カウント:1」から「カウント:5」まで順番に表示されます。

例2:ユーザーが「q」を入力するまで繰り返す

#!/bin/bash

input=""
while [ "$input" != "q" ]
do
read -p "続けますか?終了するには「q」: " input
done

echo "終了しました"

このスクリプトでは、ユーザーが「q」と入力するまでプロンプトが表示され、入力を待つ動作を繰り返します。


無限ループの作成とその活用法

while文を使えば、無限ループを簡単に作ることができます。

while true
do
echo "無限ループ中です。Ctrl+Cで終了します。"
sleep 1
done

while trueとすることで、常に条件が真になり、ループが止まりません。無限ループは監視スクリプトや、常駐処理などに使われます。

使用例:ログファイルの監視

while true
do
tail -n 10 /var/log/syslog
sleep 5
done

このようにすると、5秒ごとにシステムログの最新10行を表示し続けることができます。


コマンド出力を条件に使う方法

whileの条件にコマンドの実行結果を使うと、より柔軟な処理が可能になります。

例:プロセスが終了するまで待つ

while pgrep my_app > /dev/null
do
echo "my_appがまだ動作中です..."
sleep 5
done

echo "my_appのプロセスが終了しました。"

このスクリプトは、my_appというプロセスが動作している間はメッセージを表示し続け、終了すると処理を抜けます。


ファイルやディレクトリの存在チェックにも使える

ファイルが存在するまで待ちたい、あるいはファイルが削除されるのを待ちたい、そんなときにもwhileは便利です。

while [ ! -f /tmp/trigger.txt ]
do
echo "ファイル /tmp/trigger.txt を待っています..."
sleep 2
done

echo "ファイルが見つかりました。処理を開始します。"

この例では、/tmp/trigger.txtというファイルが存在するまで処理を待機し、見つかったら処理を開始します。


whileの中で標準入力を扱う方法

ループでファイルの各行を1行ずつ処理したいときは、次のように書くのが便利です。

cat list.txt | while read line
do
echo "行の内容:$line"
done

または、より一般的な方法として:

while read line
do
echo "行の内容:$line"
done < list.txt

この方法は、ファイルから1行ずつ読み込んで処理を行いたい場合に非常に役立ちます。


breakやcontinueで制御を追加する

whileループの中で特定の条件でループを終了させたい、あるいはスキップさせたいときはbreakcontinueを使います。

breakの例:

count=1
while [ $count -le 10 ]
do
if [ $count -eq 5 ]; then
echo "カウントが5なのでループ終了"
break
fi
echo "カウント:$count"
count=$((count + 1))
done

continueの例:

count=0
while [ $count -lt 5 ]
do
count=$((count + 1))
if [ $count -eq 3 ]; then
echo "3はスキップ"
continue
fi
echo "カウント:$count"
done

実践的な例:ディスク容量の監視スクリプト

最後に、while文を使った少し実用的なスクリプトを紹介します。

#!/bin/bash

threshold=90

while true
do
usage=$(df / | grep / | awk '{print $5}' | sed 's/%//g')
if [ $usage -ge $threshold ]; then
echo "ディスク使用率が${usage}%です。注意が必要です。"
else
echo "現在のディスク使用率は${usage}%です。"
fi
sleep 60
done

このスクリプトでは、1分ごとにルートディレクトリのディスク使用率を確認し、90%以上になったら警告を出すという動作をします。


まとめ:Linuxの繰り返し処理にwhileは欠かせない

while文は、Linuxシェルスクリプトの中でも非常に柔軟で使いやすいループ構文です。基本的な構文を理解し、実例を参考にすることで、ファイル操作やプロセス監視、ユーザー入力の処理など、さまざまな用途に活用できます。条件をうまく使えば、無限ループや中断付きのループなど複雑な処理も簡単に記述可能です。

繰り返し処理を必要とする場面では、ぜひwhileを活用してみてください。スクリプトの自動化や作業の効率化にきっと役立つはずです。

タイトルとURLをコピーしました