在下面的bash-shell脚本中,直到循环无法正常工作。
cm_health_check=$(curl -X GET -u "admin:admin" http://$HOSTNAME:7180/api/v11/cm/service/ | jq '
.entityStatus')
echo $cm_health_check
until [ $cm_health_check -eq "GOOD_HEALTH" ]
do
cm_health_check=$(curl -X GET -u "admin:admin" http://$HOSTNAME:7180/api/v11/cm/service/ | jq '
.entityStatus')
done
输出
+ curl -X GET -u admin:admin http://abcd.xyz.com:7180/api/v11/cm/service/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 503 0 0 17023 0 --:--:-- --:--:-- --:--:-- 17344
"STARTING"
+ echo '"STARTING"'
+ [ '"STARTING"' -eq GOOD_HEALTH ]
直到循环没有等待状态得到GOOD_HEALTH,我在这里做错了什么?
-eq
运算符用于数字,而不是字符串。对于字符串,您需要=
。如果您查看bash
文档,您将看到(我的重点是(:
arg1 OP arg2
:OP
是-eq
、-ne
、-lt
、-le
、-gt
或-ge
之一
如果arg1
分别等于、不等于、小于、小于或等于、大于或大于arg2
,则这些算术二进制运算符返回trueArg1
和arg2
可以是正整数或负整数
例如:
pax:~> [[ 'xx' = 'yy' ]] && echo WTF
pax:~> [[ 'xx' -eq 'yy' ]] && echo WTF
WTF