如果声明问题

时间:2014-09-19 14:58:11

标签: bash if-statement scripting

我是脚本新手,如果系统上有更新,我会尝试向自己发送电子邮件。我想这样做的方法是,如果yum check-update报告任何包裹,给我发电子邮件,如果没有做任何事情。这就是我想出的:

#!/bin/bash

cat /dev/null > /root/scripts/updates.txt

yum check-update > /root/scripts/updates.txt

updatecheck=$(cat /root/scripts/updates.txt | grep updates | grep -v mirrors)
updatestatus=$(echo "$updatecheck" | wc -l)

if [ $updatestatus == 0 ]
then
        mail -s "There are no updates for monitor01.aevhosting.com" email@address.com
else
        mail -s "There are updates for monitor01.aevhosting.com" email@address.com
fi

它没有做任何事只是挂在那里并回到命令行我必须控制+ c退出脚本。我也在追踪mailog,看看它是否发出了什么,但事实并非如此。不知道这里有什么问题,但任何和所有帮助都会非常受欢迎!!

谢谢

2 个答案:

答案 0 :(得分:2)

mail正在等待标准输入来填充电子邮件正文。给它一些东西:

echo 'This is automated e-mail, do not reply' | mail -s "There are updates..." email@address.com

答案 1 :(得分:0)

感谢大家的帮助,我得到了@choroba的建议。我不得不在我下面做的邮件命令之前把回声“test”放在它上面并且它有效:

#!/bin/bash

cat /dev/null > /root/scripts/updates.txt

yum check-update > /root/scripts/updates.txt

updatecheck=$(cat /root/scripts/updates.txt | grep updates | grep -v mirrors)
updatestatus=$(echo "$updatecheck" | wc -l)

if [ $updatestatus == 0 ]
then
    echo "There are no updates for monitor01.aevhosting.com" | mail -s "Update Status" email@gmail.com
else
    echo "There are updates for monitor01.aevhosting.com" | mail -s "Update Status" email@gmail.com
fi

再次感谢大家的帮助!!