读取消息的 unix 日志,然后执行操作
Read unix log for message and then perform action
我想创建一个 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
。
改变行如下:
echo "$LINE" | grep -q "$string"
引号设置不正确。就像你执行它的时候:grep -q ntp engine ready
; ntp
是要搜索的字符串,engine
和 ready
是文件。它必须看起来像:grep -q "ntp engine ready"
.
首先,您需要修改引号:
echo "$LINE" | grep -q "$string"
其次,你可以简单地做:
if echo "$LINE" | grep -q "$string"; then
而不是手动检查 return 代码 $?
。请记住,[
也是一个命令,if
只是检查它的 return 代码。
如果您确实需要使用 [
,请记住 ]
是命令的参数,因此必须用空格将其括起来:
if [ $? = 0 ]
我还删除了第二个 =
,因为它是支持它的 bash 扩展。实际上你正在做一个整数比较,所以实际上它应该是以下之一:
if [ $? -eq 0 ] # POSIX compliant
if (( $? == 0 )) # bash arithmetic context
我想创建一个 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
。
改变行如下:
echo "$LINE" | grep -q "$string"
引号设置不正确。就像你执行它的时候:grep -q ntp engine ready
; ntp
是要搜索的字符串,engine
和 ready
是文件。它必须看起来像:grep -q "ntp engine ready"
.
首先,您需要修改引号:
echo "$LINE" | grep -q "$string"
其次,你可以简单地做:
if echo "$LINE" | grep -q "$string"; then
而不是手动检查 return 代码 $?
。请记住,[
也是一个命令,if
只是检查它的 return 代码。
如果您确实需要使用 [
,请记住 ]
是命令的参数,因此必须用空格将其括起来:
if [ $? = 0 ]
我还删除了第二个 =
,因为它是支持它的 bash 扩展。实际上你正在做一个整数比较,所以实际上它应该是以下之一:
if [ $? -eq 0 ] # POSIX compliant
if (( $? == 0 )) # bash arithmetic context