Bashスクリプトは、LinuxやUnixシステムでのタスク自動化に非常に有用です。特にループを使うことで、反復的なタスクを効率よく行えます。この記事では、Bashでのループの使い方を詳しく解説し、タスクを自動化するためのコツを紹介します。
Bashループの基本
Bashで使われる主なループは、for
ループ、while
ループ、そしてuntil
ループです。それぞれの使い方を具体的な例を交えて見ていきましょう。
forループ
for
ループは、リストや配列の要素を順番に処理するのに適しています。基本的な構文は以下の通りです。
for item in list
do
# コマンド
done
forループの例
ディレクトリ内のすべてのファイルに対して、何らかの処理をしたい場合にfor
ループを使うことができます。
for file in *.txt
do
echo "Processing $file"
# ファイルに対して何かの処理を行う
done
このスクリプトは、カレントディレクトリ内の全ての.txt
ファイルに対して処理を行います。
whileループ
while
ループは、条件が真である間、繰り返すループです。以下が基本の形です。
while [ 条件 ]
do
# コマンド
done
whileループの例
ファイル内の行を1行ずつ読み込みたい場合:
while IFS= read -r line
do
echo "Reading line: $line"
done < input.txt
この例では、input.txt
というファイルを1行ずつ読み取ります。
untilループ
until
ループは、条件が偽である間、繰り返します。これはwhile
ループの逆です。
until [ 条件 ]
do
# コマンド
done
untilループの例
カウンターを使って、指定した回数まで繰り返す例を見てみましょう。
counter=0
until [ $counter -eq 10 ]
do
echo "Counter is $counter"
((counter++))
done
このスクリプトは、カウンターが10になるまでcounterをインクリメントして表示します。
実用的な例
ここからは、実際の用途に即したBashスクリプトの例を紹介していきます。
ファイルのバッチ処理
例えば、大量の画像ファイルをサイズ変更する必要がある場合、for
ループを用いることができます。
for image in *.jpg
do
convert "$image" -resize 800x600 "resized_$image"
done
このスクリプトはImageMagickのconvert
コマンドを使用して、すべてのJPEG画像を800×600ピクセルにリサイズします。
監視と再試行
リモートサーバーが利用可能になるまで待ち、利用可能時にファイルを転送します。
while ! ping -c 1 server.com >/dev/null 2>&1
do
echo "Waiting for server..."
sleep 10
done
scp file.txt user@server.com:/path/to/destination/
この例では、ping
コマンドで接続をチェックし、サーバーが応答するまで10秒ごとに待機します。
ログモニタリング
以下の例では、ログファイル内にエラーメッセージが現れるのを監視し、見つかった場合に通知を送ります。
tail -F /var/log/syslog | while read line
do
if echo "$line" | grep -q "ERROR"
then
echo "Error found: $line"
# 通知処理を追加
fi
done
このスクリプトは、ログファイルをリアルタイムで監視し、エラーメッセージが検出された際に対応します。
エラーハンドリング
ループを使う際は、エラーハンドリングも考慮しましょう。以下は、for
ループにおける典型的なエラー処理のパターンです。
for file in *.zip
do
unzip "$file" -d /extracted/ || { echo "Failed to unzip $file"; exit 1; }
done
ここでは、unzip
コマンドが失敗した場合、エラーメッセージを表示し、スクリプトを終了します。
結論
Bashのループを使えば、さまざまなタスクを効率よく自動化できます。for
ループ、while
ループ、until
ループを使い分けることで、作業の自動化をさらに進められます。そして、実用的なスクリプト構成においては、エラーハンドリングも忘れずに組み込むことで、安全で効率的なシステム管理が実現できます。これらのテクニックを活用して、日常のタスクを効果的に自動化しましょう。
コメント