Bashのwhileループをマスターすることは、多くのLinuxユーザーにとって重要なスキルです。このガイドでは、whileループの基礎を解説し、実践的な例を通してどのように活用できるかを学びます。Bashスクリプトの自動化をもっと効率的に行いたい方には必見です。
Bashのwhileループとは?
Bashのwhileループは、指定した条件が真である間、繰り返し処理を実行するための構造です。シェルスクリプトでの繰り返し処理を実装するための基本的な要素であり、条件が偽に変わるまで処理を続けることができます。基本的な構文は以下の通りです。
while [ 条件 ]
do
コマンド
done
基本的な使い方
whileループの中で使われる条件は、数値の比較やファイルの存在チェック、変数の値の判定など様々です。ここでは、シンプルなカウントダウンの例を見てみましょう。
count=5
while [ $count -gt 0 ]
do
echo "Count is $count"
count=$((count - 1))
done
このスクリプトは、変数count
の値が0より大きい限り、カウントダウンを行うものです。このように、変数と数値の比較を条件として使うことができます。
無限ループとbreak文
場合によっては無限ループが必要なこともあります。無限ループは、ユーザーからの入力を待ったり、一定条件を満たすまで繰り返し処理が必要な場面で役立ちます。以下にその例を示します。
while true
do
echo "Please enter your name:"
read name
if [ -n "$name" ]; then
echo "Hello, $name!"
break
fi
done
このサンプルでは、ユーザーが名前を入力するまでループが続き、入力があった場合にbreak
文でループを抜けます。
条件式の多様性
whileループの条件部は非常に多様です。以下は、ファイルの存在をチェックする例です。
file_path="/path/to/file.txt"
while [ ! -e "$file_path" ]
do
echo "Waiting for file to appear..."
sleep 1
done
echo "File found!"
このスクリプトは指定したファイルが出現するまで待機し、完全に自動化されたタスクを処理するために役立ちます。
実用的な例: ファイルの一行ずつの読み込み
whileループは、ファイルを一行ずつ読み取るのにも便利です。次の例では、ファイルからユーザーリストを読み取り、それぞれの名前を出力します。
while IFS= read -r line
do
echo "User: $line"
done < "user_list.txt"
ここではIFS
(内部フィールドセパレータ)を変更していることに注意してください。これにより、行全体を正確に読み取ることができます。
実践応用編: バッチ処理の自動化
次に、特定のディレクトリ内の全ての画像ファイルをサイズ変更するバッチ処理スクリプトを作成してみましょう。
#!/bin/bash
input_dir="./images"
output_dir="./resized_images"
mkdir -p "$output_dir"
files=$(ls $input_dir/*.jpg)
for file in $files
do
filename=$(basename "$file")
convert "$file" -resize 800x800 "$output_dir/$filename"
echo "Resized $filename"
done
ここでは、convert
コマンドを使用して画像をリサイズするバッチ処理を実行しています。このスクリプトは指定したディレクトリ内の全jpgファイルを処理し、サイズ変更後のファイルを別のディレクトリに保存します。
終わりに
Bashのwhileループは、様々なタスクを効率的に自動化するための強力なツールです。基本理解を深めたら、これらを複雑なスクリプトソリューションに組み込んで使うことができます。今回のガイドで得た知識をさらに拡張し、独自のスクリプトを構築してみてください。これにより、毎日の作業をよりシンプルで効率的に進めることが可能になります。
コメント