0

这就是我想要完成的事情。我想运行一个循环,直到匹配一个字符串,执行一次 do 命令并继续执行脚本的其余部分?例如

string=`tail /var/myapp/main.log|sort -k5 | awk '{print $4}'`

while [ $string = "failed" ] do
service restart myapp
break
done
echo "blah blah blah as the rest of the script"
echo "on and on"

我试过使用直到,但我怀疑那是一个。也许我没有使用正确的命令。“IF”不起作用,因为我想每天运行一次,直到它在特定时间找到我正在寻找的东西,做它的事情,完成脚本的其余部分,然后完成。无论我尝试多少,它都会继续循环……永远。我只想让它做一次。

4

2 回答 2

1

您需要检查无限循环中的条件,并在满足您的条件时中断:

while true; do
  string=$(tail /var/myapp/main.log|sort -k5 | awk '{print $4}')
  [ $string = "failed" ] && break
done
service restart myapp
echo "blah blah blah as the rest of the script"
echo "on and on"
于 2013-04-30T05:00:35.470 回答
0
while sleep 1
do
  set $(tail /var/myapp/main.log | sort -k5 | awk '{print $4}')
  [ $1 = failed ] || break
done

service restart myapp
  • 每秒循环一次
  • 每个循环检查输出是否相等failed
  • 如果没有failed,那么打破
  • 脚本的其余部分
于 2013-04-30T03:19:14.380 回答