我是脚本世界的新手,目前正在使用脚本对我管理的san设备执行运行状况检查。
脚本很简单,可以将命令输出重定向到从远程设备到本地主机的当前文件。然后我使用diff命令比较当前文件和参考文件的输出,并获得差异的电子邮件警报。 diff的输出传递给变量“variable”,然后使用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命令中的各种选项,但是我无法找出任何可以帮助我的方法。
任何帮助都会受到很大关注。
答案 0 :(得分:0)
您需要运行一个sed命令,将'/ n'替换为正在发送的电子邮件竞争中的''。
电子邮件呈现为HTML文本,因此/ n被省略。
使html在下一行显示。
答案 1 :(得分:0)
您忘记在$variable
使用此:
echo "$variable" | mail -s switch_HARDWARE_CHECK recipeint_email_address
解释原因here
答案 2 :(得分:0)
“变量”应该是什么?
diff的输出? (使用反引号)
还是diff的退出代码? (使用$?)
因为你现在所拥有的东西给了我一个错误。
-bash: switchshow_reference: command not found