2015-02-06 41 views
0

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

#!/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

回答

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 
+0

感谢就像我说的有点甚至这种形式的新手,谢谢所有帮助 – 2015-02-06 14:57:07

+0

@Erik没有问题,感谢您接受我的答案。如果您还没有这样做,我会建议您参加[巡演],这不需要很长时间,并且包含有关此类事物的信息。 – 2015-02-06 14:58:47

0

改变路线如下:

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

引号设定不正确。就像您执行该操作时那样:grep -q ntp engine ready; ntp是要搜索的字符串,而engineready是文件。它必须如下所示:grep -q "ntp engine ready"