直到循环不能在shell中进行字符串比较



在下面的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,则这些算术二进制运算符返回true
Arg1arg2可以是正整数或负整数

例如:

pax:~> [[ 'xx' = 'yy' ]] && echo WTF
pax:~> [[ 'xx' -eq 'yy' ]] && echo WTF
WTF

最新更新