You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell中while循环执行报错:sh: 3: not found求助

问题排查与解决

核心错误原因

  1. 变量引用语法错误:脚本里的$(size_1)是试图执行名为size_1的命令,但你实际想引用的是变量,应该写成$size_1。Shell找不到size_1这个命令时,就会抛出sh: 3: not found这类错误(这里的"3"是命令不存在对应的错误码提示)。
  2. 反引号未闭合:echo 'Waiting for the bjy-hazelcast'中的反引号 `没有配对,Shell会把它当作命令替换的起始标记,试图解析后续内容为命令,进一步引发语法问题。

修正后的脚本

while [ $(curl -s http://<servicename>:<portnumber>/hazelcast/health | jq '.clusterSize') -ne $size_1 ];do 
  sleep 2
  echo 'Waiting for the bjy-hazelcast'
done

额外优化建议

为避免非数值比较的错误(比如curl/jq返回空值或非整数),可以先把集群大小结果存入变量,并添加合法性检查:

while true; do
  cluster_size=$(curl -s http://<servicename>:<portnumber>/hazelcast/health | jq -r '.clusterSize')
  if [[ "$cluster_size" =~ ^[0-9]+$ && "$cluster_size" -ne "$size_1" ]]; then
    sleep 2
    echo 'Waiting for the bjy-hazelcast'
  else
    break
  fi
done

用[[ ]]替代[ ]做条件判断,支持更安全的字符串和数值比较,能避开不少语法陷阱。

内容的提问来源于stack exchange,提问作者nagu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:10:32