unix 脚本中的until循环中的无限循环

unix 脚本中的until循环中的无限循环

我正在使用unix脚本until loop。我的脚本的想法是它需要不断验证url状态是up还是down。当它up时,它将退出循环。在我的脚本中,我将用于curl检查 url 状态和grep状态代码(仅等于200.据我了解,until 循环是如何工作的,它将继续执行,直到满足我们定义的条件为止。当我测试我的脚本时,它最终陷入无限循环。
这是我的脚本:

var=""
until [echo "$var" | grep -q "HTTP/1.1 200 OK"]
do 
  var=$(curl -I -k https://mystie url | grep "HTTP/1.1 200 OK")
  echo $var
done

如果我var=$(curl -I -k https://mystie url | grep "HTTP/1.1 200 OK")直接在终端中测试,它能够返回正确的结果。

答案1

方括号只能包含条件表达式(一元或二元),因此您需要删除方括号以使用命令的退出状态作为条件:

until curl -I -k https://mystie url | grep -q "HTTP/1.1 200 OK"
do
   .... do something .... 
done

由于您错误地使用了方括号,因此条件失败(并以非零状态退出),因此您的until循环永远不会停止。

方括号 ( [ ... ]) 只能包含条件表达式,并且第一个方括号之后和最后一个方括号之前必须有一个空格。

例如,[ "$var" = "expected value" ] 而不是["$var" = "expected value"]

相关内容