0

我是脚本世界的新手,目前正在使用脚本对我管理的 san 设备执行健康检查。

该脚本很简单,并将命令的输出重定向到从远程设备到我的本地主机的当前文件。然后,我使用 diff 命令比较当前文件和参考文件的输出,并收到有关差异的电子邮件警报。diff 的输出被传递给变量“variable”,然后使用 if 循环 if 得到结果

到目前为止,我已经让自动登录和电子邮件部分正常工作(只有在与 DIFF 命令不同时,我才会收到一封电子邮件)。但是,我现在收到的电子邮件将其测试连接成一个长字符串,这不利于查看,并且对于将要收到它的人来说也不容易理解。

我当前的脚本粘贴在下面

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 命令没有发现任何差异时,我没有收到任何电子邮件。

但是,当 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

输出应在电子邮件中一次显示一行。有什么建议么?当只有一条线有差异时,这很好用,但是多线差异给了我上述问题。另外我的要求是差异输出必须通过电子邮件发送给我。我检查了 diff 命令中的各种选项,但是我无法找出任何可以帮助我的选项。

任何帮助将不胜感激。

4

3 回答 3

0

“变量”中应该包含什么?

差异的输出?(使用反引号)

或差异的退出代码?(使用 $?)

因为你现在得到的东西给了我一个错误。

-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 回答