Shell中while循环执行报错:sh: 3: not found求助
问题排查与解决
核心错误原因
- 变量引用语法错误:脚本里的
$(size_1)是试图执行名为size_1的命令,但你实际想引用的是变量,应该写成$size_1。Shell找不到size_1这个命令时,就会抛出sh: 3: not found这类错误(这里的"3"是命令不存在对应的错误码提示)。 - 反引号未闭合:
echo 'Waiting for thebjy-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
相关产品推荐
相关产品推荐

