Bashでのループの使い方:効率的にタスクを自動化する方法

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ループを使い分けることで、作業の自動化をさらに進められます。そして、実用的なスクリプト構成においては、エラーハンドリングも忘れずに組み込むことで、安全で効率的なシステム管理が実現できます。これらのテクニックを活用して、日常のタスクを効果的に自動化しましょう。

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする
未分類

コメント

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