until - 循环直到条件成功

until 在条件命令返回非零状态时执行循环体;条件返回零后停止。它与 while 的判断方向相反。

基本语法

until condition; do
  commands
done

简单示例

count=1
 
until (( count > 3 )); do
  printf 'count=%d\n' "$count"
  (( count += 1 ))
done

有上限的重试

重试外部命令时应同时设置次数上限和等待时间,避免无限循环快速消耗资源。

attempt=1
max_attempts=5
 
until some_command; do
  if (( attempt >= max_attempts )); then
    echo "达到最大重试次数" >&2
    exit 1
  fi
 
  printf '第 %d 次执行失败,稍后重试\n' "$attempt" >&2
  sleep 5
  (( attempt += 1 ))
done

如果命令本身可能长时间不返回,还应使用该命令提供的超时参数,或由外部超时工具限制单次执行时间。

参考资料