0

私はスクリプトの世界に不慣れで、現在スクリプトを使用して、管理しているsanデバイスのヘルスチェックを実行しています。

スクリプトは単純で、コマンドの出力をリモート デバイスから現在のファイルにリダイレクトし、ローカル ホストに転送します。次に、diff コマンドを使用して、現在のファイルと参照ファイルの出力を比較し、違いに関する電子メール アラートを受け取ります。diff の出力は変数「変数」に渡され、結果を取得する場合は if ループを使用します

これまでのところ、自動ログインと電子メールの部分が機能しています(DIFFコマンドとの違いがある場合にのみ電子メールを受け取ります)。しかし、私が今受け取った電子メールは、そのテストが 1 つの長い文字列に連結されているため、見にくく、受信者にとって理解しにくいものになっています。

現在のスクリプトを以下に貼り付けます

ssh test@ip_of_device switchshow > switchshow_results
variable=diff switchshow_reference switchshow_results
if [[ $variable -eq 0 ]]
then
    echo $"nothing"
else
    echo $variable | mail -s switch_HARDWARE_CHECK recipeint_email_address
fi

上記のスクリプトの出力は空白であり、diff コマンドで違いが見つからない場合、メールが届きません。

ただし、差分コマンドが違いを見つけると、以下に貼り付けられたようなメールが届きます

16c16 < 0 0 010000 id N4 Online FC F-Port 1 N Port + 1 NPIV public --- > 0 0 010000 id N4 No_Light FC F-Port 1 N Port + 1 NPIV public 26c26 < 10 10 010a00 id N4 Online FC F-Port 1     N Port + 1 NPIV public --- > 10 10 010a00 id N4 No_Light FC F-Port 1 N Port + 1 NPIV public 29c29 < 13 13 010d00 id N4 Online FC F-Port 50:06:01:67:3b:20:23:0a --- > 13 13 010d00 id N4 No_Light FC F-Port 50:06:01:67:3b:20:23:0a

これは理想的には電子メールでこのように見えるはずです..

16c16 < 0 0 010000 id N4 Online FC F-Port 1 N Port + 1 NPIV public --- > 0 0 010000 id N4 No_Light FC F-Port 1 N Port + 1 NPIV public

26c26 < 10 10 010a00 id N4 Online FC F-Port 1 N Port + 1 NPIV public --- > 10 10 010a00 id N4 No_Light FC F-Port 1 N Port + 1 NPIV public

29c29 < 13 13 010d00 id N4 Online FC F-Port 50:06:01:67:3b:20:23:0a --- > 13 13 010d00 id N4 No_Light FC F-Port 50:06:01:67:3b:20:23:0a

出力は、電子メールで一度に 1 行表示する必要があります。助言がありますか?これは、違いがある行が1つしかない場合は正常に機能しますが、複数の行の違いにより上記の問題が発生します。また、私の要件は、差分出力をメールで送信する必要があることです。diff コマンドでさまざまなオプションを確認しましたが、役立つオプションを見つけることができませんでした。

どんな助けでも大歓迎です。

4

3 に答える 3

0

「変数」には何が含まれているはずですか?

差分の出力?(バッククォートを使用)

またはdiffの終了コード?($? を使用)

あなたが今持っているものは私にエラーを与えるからです。

-bash: switchshow_reference: command not found
于 2013-09-04T16:12:02.257 に答える
0

sed コマンドを実行して、送信される電子メール コンテンツの「/n」を「」に置き換える必要があります。

メールは HTML テキストとして表示されるため、/n は省略されています。
html に次の行に表示させます。

于 2013-09-04T00:37:56.140 に答える
0

引用符を配置するのを忘れた$variable

これを使って:

echo "$variable" | mail -s switch_HARDWARE_CHECK recipeint_email_address

その理由はここで説明されています

于 2013-09-04T00:38:08.733 に答える