虽然循环挂起但找不到字符串

时间:2016-06-17 21:41:15

标签: bash

我在bash脚本中有一段代码,它使用while循环来grep文件,直到我找到的字符串为止,然后退出。目前,它只是悬挂使用以下代码:

hostname="test-cust-15"
VAR1=$(/bin/grep -wo -m1 "HOST ALERT: $hostname;DOWN"  /var/log/logfile)

while [ ! "$VAR1" ]
do
sleep 5
done
echo $VAR1 was found

我知道负责将此字符串插入日志文件的脚本部分可以正常工作,因为我可以在脚本旁边查找并找到它。

我尝试过的一件事就是改变变量。像这样:

hostname="test-cust-15"
VAR1="HOST ALERT: $hostname;DOWN"


while [ ! /bin/grep "$VAR1" /var/log/logfile ]
do
sleep 5
done
echo $VAR1 was found

但是我得到了一个二元运算符预期的消息,并且在使用它时我得到了太多的参数消息:

while [ ! /bin/grep -q -wo "$VAR1" /var/log/logfile ]

我需要做些什么来解决这个问题?

3 个答案:

答案 0 :(得分:3)

while / until可以直接处理程序的退出状态。

until /bin/grep "$VAR1" /var/log/logfile
do
    sleep 5
done
echo "$VAR1" was found

您还提到它会在上面的评论中打印出匹配项。如果 ,则使用输出重定向或grep' s -q选项。

until /bin/grep "$VAR1" /var/log/logfile >/dev/null

until /bin/grep -q "$VAR1" /var/log/logfile

答案 1 :(得分:2)

无需在那里打扰命令替换或测试操作符。简单地:

while ! grep -wo -m1 "HOST ALERT: $hostname;DOWN"  /var/log/logfile; do
    sleep 5
done

答案 2 :(得分:0)

不要浪费资源,使用尾巴!

#!/bin/bash
while read line
    do
    echo $line
    break
done < <(tail -f /tmp/logfile | grep --line-buffered "HOST ALERT")