我希望创建一个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
。
答案 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
是要搜索的字符串,engine
和ready
是文件。它必须如下:grep -q "ntp engine ready"
。