开发工具

Shell until 语句

13 篇文章69 次收藏
上一节:Shell while 语句下一节:Shell 函数

在 Shell 脚本中,until 循环与 while 循环相反:它在条件为假时重复执行循环体,直到条件变为真为止。以下是 until 循环的详细语法和用法:

一、基本语法

until [ 条件测试 ]
do
    # 循环体命令
done


二、核心组成部分

1、until 关键字

表示循环开始,后跟条件测试。


2、条件测试

使用 [ ... ]、[[ ... ]] 或命令返回值(退出状态码)作为条件。

若条件测试的返回值为 非0(假),则执行循环体;当条件为真(返回 0)时,循环终止。


3、do 和 done

do 标记循环体的开始。

done 标记循环体的结束。


三、常见用法示例

1. 计数器循环

count=5
until [ $count -eq 0 ]
do
    echo "倒计时: $count"
    ((count--))
done

# 输出:
# 倒计时: 5
# 倒计时: 4
# ...直到1


2. 等待服务启动

# 持续检测直到Nginx启动成功
until systemctl is-active --quiet nginx
do
    echo "等待Nginx启动..."
    sleep 2
done
echo "Nginx已运行!"


3. 读取文件内容

until [ -z "$line" ]  # 当line变量为空时停止
do
    read -p "输入内容(直接回车退出): " line
    echo "你输入了: $line"
done


4. 监控资源释放

# 持续检测直到磁盘使用率低于80%
until [ $(df / --output=pcent | tail -1 | tr -d '% ') -lt 80 ]
do
    echo "磁盘空间不足,请清理..."
    sleep 30
done


四、循环控制

1、break 终止循环

num=10
until false  # 无限循环
do
    if [ $num -le 0 ]; then
        break
    fi
    echo "倒计时: $num"
    ((num--))
done


2、continue 跳过当前迭代

num=0
until [ $num -ge 10 ]
do
    ((num++))
    if [ $((num % 2)) -eq 0 ]; then
        continue  # 跳过偶数
    fi
    echo "奇数: $num"
done


五、与 while 循环的对比

特性untilwhile
执行条件条件为假时执行循环体条件为真时执行循环体
典型场景等待条件满足(如服务启动)持续操作直到条件改变(如计数器)
示例until [ $x -eq 5 ]; do ...while [ $x -lt 5 ]; do ...


六、高级用法

1. C语言风格循环(Bash支持)

i=5
until ((i == 0))  # 使用算术表达式
do
    echo "i=$i"
    ((i--))
done


2. 结合命令返回值

# 持续尝试ping直到成功
until ping -c1 example.com &>/dev/null
do
    echo "等待网络连通..."
    sleep 5
done


3. 多条件组合

a=10
b=0
until [ $a -eq 5 ] || [ $b -ge 3 ]
do
    echo "a=$a, b=$b"
    ((a--))
    ((b++))
done


七、注意事项

1、避免无限循环

确保循环条件最终会变为真,否则会导致无限循环。

until false; do ... done  # 无限循环(需手动终止)


2、变量作用域

若循环体内部通过管道(|)执行,变量修改可能不生效:

count=0
seq 3 | until read num; do ((count++)); done
echo "$count"  # 输出0(管道创建子Shell,count不共享)


3、性能优化

避免在条件测试中执行耗时操作(如网络请求),应将其结果缓存到变量中:

result=$(curl -s example.com)
until [ "$result" = "OK" ]; do ... done


通过合理使用 until 循环,可以优雅地处理需要等待条件满足的场景。建议根据实际需求选择 until 或 while,并注意循环终止条件的正确性。



上一节:Shell while 语句下一节:Shell 函数