シェルスクリプトの動作変更

利用目的

すでに利用されているシェルスクリプト(今回はログ監視目的のもの)に対し、一部動作の変更を簡単に実現したい。

プロンプト

下記シェルスクリプトでERRORLOGが空の場合はなにもせずに終了させたいです。
書き換えてください。

#!/bin/bash
DAY=`/usr/bin/date "+%Y-%m-%d"`
ERRORLOG=`/usr/bin/grep ERROR test-$DAY.log`
From="From: <A@test.jp>"
To="To: <B@test.jp>"
Subject="Subject: Log Alert test $DAY"
ContentType='Content-Type: text/plain;charset="UTF-8"'
echo -e "$From\n$To\n$Subject\n$ContentType\n$ERRORLOG" | /usr/sbin/sendmail -i -t

プロンプトのポイント

手軽さを追求したかったので無駄な指示は一切していません。

達成された成果

実際の出力内容を共有します。

記述内容についてコメントをつけてくれたり、どんな動作をしているのか説明してくれたりかなり親切でした。

下記のスクリプトは、指定されたログファイルからERRORを含む行を検索し、その結果をメールで送信するスクリプトです。
ERRORLOGが空の場合には何もせずに終了するように変更しました。

#!/bin/bash
# 現在の日付を取得
DAY=`/usr/bin/date "+%Y-%m-%d"`
# ERRORを含む行をログファイルから検索
ERRORLOG=`/usr/bin/grep ERROR test-$DAY.log`
# ERRORLOGが空でない場合にメールを送信
if [ ! -z "$ERRORLOG" ]; then
    From="From: <A@test.jp>"
    To="To: <B@test.jp>"
    Subject="Subject: Log Alert test $DAY"
    ContentType='Content-Type: text/plain;charset="UTF-8"'
    echo -e "$From\n$To\n$Subject\n$ContentType\n$ERRORLOG" | /usr/sbin/sendmail -i -t
fi

このスクリプトでは、まず現在の日付をdateコマンドを使って取得しています。
次にgrepコマンドで指定されたログファイルから"ERROR"を含む行を検索し、その結果をERRORLOG変数に格納します。

そして、if文を使用してERRORLOG変数が空でない場合(つまりエラーログが存在する場合)のみ、メール送信の処理を実行します。
メールの内容にはエラーログが含まれます。

使用上のヒントやアドバイス

今回のスクリプトは短いのであまり利点を感じないと思いますが、これが長いスクリプトかつ自分で作成したわけではないものだった場合、記述についての説明コメントの付記・挙動についての説明をしてくれるのはすごく助かると思います。

追加のリソースまたは参考情報

https://chat.openai.com/share/e/12fb604b-4f02-4a68-9c2b-0c500ac99beb

レビューを書く
1
2
3
4
5
送信
     
キャンセル

レビューを書いてみましょう

AIアセットラボ
Average rating:  
 1 reviews
 by Anonymous

コメントの付記なんかは、他の人が書いたソースを見るうえですごく助かりそうですね!