【问题标题】:Shell script to poll whether a service is up用于轮询服务是否启动的 Shell 脚本
【发布时间】:2019-11-20 14:01:51
【问题描述】:

我想知道代码有没有错误

while true
do
    var=$(curl http://${SERVER_HOST}:8060/vmc/vdisizer/api/v1/health) && echo "Got Reply from $SERVER_HOST" || echo "Curl failed to connect to $SERVER_HOST" 
    if [ "$var" -eq "OK" ]
    then
        echo "Success"
        break
    fi
done

这不起作用,我收到以下错误 -

int-tester_1     | curl: (52) Empty reply from server

我希望它持续轮询服务,直到服务回复“OK”,然后退出循环。

将 -eq 更改为 = 时,出现以下错误 -

int-tester_1     | + var=OK
int-tester_1     | Got Reply from 10.2.223.87
int-tester_1     | + echo 'Got Reply from 10.2.223.87'
int-tester_1     | + '[' = OK ']'
int-tester_1     | ./run_itests.sh: line 33: [: =: unary operator expected

【问题讨论】:

  • 这不是造成当前问题的原因,而是-eq 进行整数比较,而不是字符串比较。在[ ] 测试中,使用= 进行字符串比较。另外,请注意,网页内容通常使用 CRLF 行尾,所以如果回复名义上是OK,实际上是OK\r\n(其中\r 代表回车,\n 代表换行); $() 会修剪\n 但留下\r,回车会导致两个字符串不相等。
  • 得到以下错误 - ` int-tester_1 | + var=OK int-tester_1 |得到来自 10.2.223.87 int-tester_1 的回复 | + echo '得到来自 10.2.223.87 的回复' int-tester_1 | + '[' = OK ']' int-tester_1 | ./run_itests.sh: 第 33 行: [: =: 一元运算符应为 `
  • 做出改变
  • 一般来说,shellcheck.net 是调试 bash 脚本的最佳起点。
  • 哦,这就解释了。当您将var= 部分放在( ) 中时,它会在子shell 中运行,并且对`var 的分配仅适用于该子shell。去掉括号。

标签: bash shell


【解决方案1】:

问题可能与以下命令有关 SERVER_HOST 是否被填充

curl http://${SERVER_HOST}:8060/vmc/vdisizer/api/v1/health

还有 可以吗

(var=$(curl http://${SERVER_HOST}:8060/vmc/vdisizer/api/v1/health)) && echo "Got Reply from $SERVER_HOST" || echo "Curl failed to connect to $SERVER_HOST" 

curl http://10.2.223.87:8060/vmc/vdisizer/api/v1/health 得到输出?

类似Curl Error 52 Empty reply from server的东西

【讨论】:

猜你喜欢
  • 2021-12-16
  • 2015-09-02
  • 2010-12-18
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多