BashスクリプトはLinuxおよびUnixベースのシステムで定型作業を自動化するための強力なツールです。特に、whileループは特定の条件が満たされるまで繰り返し処理を実行するために使用されます。この記事では、初心者の方向けにBashでwhileループを使ってタスクを効率的に自動化する方法を紹介します。
whileループの基本構造
whileループの基本構造は以下の通りです。
while [ 条件 ]
do
# 実行するコマンド
done
この構造を用いると、指定した条件が真(true)である間、doの後に続くコマンドが繰り返し実行されます。条件式内で数値の比較や文字列の確認などが可能です。
基本的な使用例
例えば、1から5までの数字を繰り返し出力するとします。この場合、以下のようなスクリプトを書きます。
#!/bin/bash
i=1
while [ $i -le 5 ]
do
echo "Number: $i"
i=$((i + 1))
done
このスクリプトでは、変数i
が5以下である限り、現在の値を出力し、1を加えます。
条件式での演算子
条件文ではさまざまな演算子を利用できます。いくつかの基本的な演算子を以下に示します。
-
-eq
: 等しい -
-ne
: 等しくない -
-lt
: より少ない -
-le
: 以下 -
-gt
: より大きい -
-ge
: 以上
これらの演算子を利用することで、さまざまな条件を柔軟に指定できます。
ファイルのデータを読み込む
whileループはファイルのデータを読み込む際にも便利です。以下はファイルの各行を処理する方法です。
#!/bin/bash
filename="example.txt"
while read -r line
do
echo "Line: $line"
done < "$filename"
このスクリプトはexample.txt
の各行を取得し、表示します。read -r
はバックスラッシュ(\
)を無視しないためオプションで使われ、<
を用いてファイル入力をループに渡します。
無限ループの利用と注意
whileループを使えば、条件式をtrue
として無限ループを構築することも可能です。
#!/bin/bash
while true
do
echo "Running forever…"
sleep 1
done
このスクリプトは停止するまで1秒毎に文字列を表示します。しかし、無限ループを使用する際は必ず必要に応じて制御フラグを設け、例えばbreak
を使用して意図的にループを抜けることを考慮する必要があります。
実用例:バックアップの自動化
Bashのwhileループを用いて、定期バックアップを自動化する例を見てみましょう。このスクリプトは特定のディレクトリをチェックし、変更があった場合にバックアップを作成します。
#!/bin/bash
WATCHED_DIR="/path/to/watch"
BACKUP_DIR="/path/to/backup"
while true
do
if inotifywait -qre modify,create,delete "$WATCHED_DIR"
then
tar -czf "$BACKUP_DIR/backup_$(date +%Y%m%d%H%M%S).tar.gz" "$WATCHED_DIR"
echo "Backup created at $(date)"
fi
sleep 60
done
inotifywait
コマンドを使い、WATCHED_DIR
での変更を監視し、変更が検知されたらバックアップを自動的に行います。バックアップは毎分チェックされますが、監視の間隔はsleep
で調整可能です。
まとめ
Bashのwhileループは条件に応じた繰り返し処理に非常に適しており、特にタスクの自動化に力を発揮します。本記事を通じて、基本的なwhileループの使い方や実用的な自動化の例を学び、日常業務の効率化に役立ててください。Bashスクリプトの魅力は無限で、要件に応じて高度にカスタマイズすることができます。お試しください!
コメント