读取unix日志以获取消息,然后执行操作

时间:2015-02-06 12:44:06

标签: bash grep tail

我希望创建一个shell脚本来读取消息日志,并在找到正确的字符串时执行操作。到目前为止,我有以下内容:

#!/bin/bash
string="ntp engine ready"
tail -n 0 -f /var/log/messages | \
while read LINE
do
echo "$LINE | grep -q $string"
if [ $? == 0];then
shttpclient "http://127.0.0.1/do/action"
fi
done

但是,我收到以下错误:

grep: engine: No such file or directory
grep: ready: No such file or directory

即使我看到记录器已输出ntp engine ready

2 个答案:

答案 0 :(得分:1)

首先,您需要修改报价:

echo "$LINE" | grep -q "$string"

其次,您可以这样做:

if echo "$LINE" | grep -q "$string"; then

而不是手动检查返回码$?。请记住,[也是一个命令,而if只是检查其返回码。

如果确实需要使用[,请记住]是命令的参数,因此必须用空格包围它:

if [ $? = 0 ]

我还删除了第二个=,因为它是支持它的bash扩展。实际上你正在进行整数比较,所以它应该是以下之一:

if [ $? -eq 0 ]  # POSIX compliant
if (( $? == 0 )) # bash arithmetic context

答案 1 :(得分:0)

按如下方式更改该行:

echo "$LINE" | grep -q "$string"

引号设置不正确。就像你执行那样:grep -q ntp engine ready; ntp是要搜索的字符串,engineready是文件。它必须如下:grep -q "ntp engine ready"