shell脚本没有跳出循环

shell脚本没有跳出循环

我是 shell 编程的新手,正在尝试实现一些重试逻辑。由于某种原因,我的 till 循环没有退出。它挂在那里。任何帮助都值得感激。

#!/bin/bash
retry_cnt=0
until [ $retry_cnt -ge 3 ]; do
  echo "current retry count - " $retry_cnt
time my command here
daily_stat=$?
if [ $daily_stat -eq 0 ]; then 
break 
fi
retry_cnt=$[$retry_cnt+1]
sleep 5 
done

答案1

关于你的脚本的一些建议:

  • 调用变量时使用括号,_在变量名称中使用括号调用变量,没有括号可能会出现错误,因为 bash 可能会将变量名解释为第一部分,在本例中:($retry参见独立财务顾问在 tldp 上
  • 使用让算术,它确实快速且易于理解。
  • 使用双括号( [[),是单括号的演变(仅当您使用bash和 而不是 时sh

尝试此版本的脚本:

/bin/bash #!/bin/bash
让 retry_cnt=0
直到 [[ ${retry_cnt} -ge 3 ]] ; 执行
    echo "当前重试次数 - ${retry_cnt}"
    在这里安排我的命令时间
    每日统计=$?
    如果 [[ ${daily_stat} -eq 0 ]] ; 那么
        休息
    让 retry_cnt++
    睡 5
完毕

答案2

根据您对我的评论的回答,我猜测是您的未命名命令挂起了,而不是脚本本身。

验证这一点的方法是将标题行更改为:

#!/bin/bash -x

这将导致每个执行的命令在执行之前显示出来,因此您将看到导致挂起的命令。

在长脚本中,可能会产生大量不相关的输出,您可以保留标题行,而是通过在前面和后面添加以下行来跟踪脚本的特定部分:-

set -x
...
set +x

相关内容