我正在使用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"]