我在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 ]
我需要做些什么来解决这个问题?
答案 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")