Bash脚本:如何解析命令的输出并根据该输出执行操作?

时间:2009-12-31 22:50:52

标签: bash scripting wget

我正在使用wget从我们的一台服务器中获取一些文件,如果它们已经更新,则每小时一次。我希望脚本在wget下载更新的文件时通过电子邮件发送给员工。

当wget没有检索文件时,文本wget输出的最后一位是

file.exe' -- not retrieving.
<blank line>

我如何查看该位文本,如果没有看到该文本,则只运行我的邮件命令?

3 个答案:

答案 0 :(得分:7)

我会用

之类的东西来做
if ! wget ... 2>&1 | grep -q "not retrieving"; then
   # run mail command
fi

答案 1 :(得分:3)

wget”成功时的退出状态是什么,何时失败?最有可能的是,它以非零退出状态报告失败,在这种情况下,它很大程度上是微不足道的:

if wget http://example.com/remote/file ...
then mailx -s "File arrived at $(date)" victim@example.com < /dev/null
else mailx -s "File did not arrive at $(date)" other@example.com < /dev/null
fi

如果您必须分析“wget”的输出,那么您将捕获并分析它:

wget http://example.com/remote/file ... >wget.log 2>&1
x=$(tail -2 wget.log | sed 's/.*file.exe/file.exe/')

if [ "$x" = "file.exe' -- not retrieving." ]
then mailx -s "File did not arrive at $(date)" other@example.com < /dev/null
else mailx -s "File arrived at $(date)" victim@example.com < /dev/null
fi

但是,我担心在这种情况下可能会有其他错误导致其他邮件,从而导致邮件不准确。

答案 2 :(得分:0)

if ${WGET_COMMAND_AND_ARGUMENTS} | tail -n 2 | grep -q "not retrieving." ; then
    echo "damn!" | mail -s "bad thing happened" user@example.com
fi