首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >shell脚本中的until命令

shell脚本中的until命令

作者头像
YaoQi
发布2026-07-10 19:05:07
发布2026-07-10 19:05:07
70
举报

until 是 Bash 和其他类 Unix shell 中的一个循环控制命令。它的作用与 while 循环相反:只要条件为假(非零退出状态)就执行循环体内的命令,一旦条件为真(零退出状态)就停止循环

常见用法场景

  • 等待某个系统状态变化(如服务启动、文件创建)
  • 重试机制(直到操作成功)
  • 输入验证(直到用户输入符合要求)

基本语法

代码语言:javascript
复制
until [ condition ]; do
    # 要执行的命令
done

或者写成一行(用分号分隔):

代码语言:javascript
复制
until [ condition ]; do commands; done

参数说明

  • condition:一个条件测试命令。可以是:
    • 一个 test 命令(使用 [ ]test
    • 一个可以返回退出状态码的任何命令(0 表示成功/真,非0 表示失败/假)
  • dodone 之间的命令是循环体,会重复执行直到条件为真。

示例

1. 基本数字计数
代码语言:javascript
复制
#!/bin/bash
count=1
until [ $count -gt 5 ]; do
    echo "Count: $count"
    ((count++))
done
2. 等待某个服务启动
代码语言:javascript
复制
until ping -c1 example.com &>/dev/null; do
    echo "等待 example.com 上线..."
    sleep 2
done
echo "example.com 已上线!"
3. 等待用户输入有效内容
代码语言:javascript
复制
until [[ "$input" =~ ^[YyNn]$ ]]; do
    read -p "是否继续? (y/n): " input
done
echo "你选择了: $input"
4. 检查文件是否存在
代码语言:javascript
复制
until [ -f /tmp/done.txt ]; do
    echo "等待 /tmp/done.txt 文件被创建..."
    sleep 1
done
echo "文件已找到!"
5. 与函数结合使用
代码语言:javascript
复制
is_server_up() {
    curl -s http://example.com > /dev/null
    return $?  # 返回 curl 的退出状态
}

until is_server_up; do
    echo "服务器未响应,重试中..."
    sleep 5
done
echo "服务器已启动!"

关键注意事项

  1. 条件检查在循环开始时进行
    • until 在每次循环迭代之前检查条件。
    • 如果初始条件已经为真,循环体将一次都不执行
  2. 避免无限循环
    • 确保循环体内的操作最终能使条件变为真,否则会无限循环。
    • 可以使用 Ctrl+C 强制终止。
  3. 条件可以是任意命令
    • 不限于 [ ] 测试,可以是任何返回退出状态码的命令。
  4. while 的对比
    • until [ ! condition ] 等价于 while [ condition ]
    • 选择哪个取决于代码可读性。

希望这些示例和解释能帮助你理解 until 的用法!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漫跑的小兔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常见用法场景
  • 基本语法
  • 参数说明
  • 示例
    • 1. 基本数字计数
    • 2. 等待某个服务启动
    • 3. 等待用户输入有效内容
    • 4. 检查文件是否存在
    • 5. 与函数结合使用
  • 关键注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档