until循环是“条件为假时执行、为真时退出”的直到型循环,语法为until condition; do commands; done,先判条件,为真则退出,为假则执行循环体并重判,至少执行一次,适用于等待服务就绪等场景。

Linux 中 until 循环是“条件为假时执行,条件为真时退出”的直到型循环,语义上更贴近“等待某事发生”。它和 while 逻辑相反,但结构相似,适合表达“直到满足才停”的场景。
until 的基本语法和执行逻辑
格式固定为:
until <em>condition</em>
do
<em>commands</em>
done
执行流程是:先判断 condition 是否为真(即命令返回值为 0);如果为真,直接退出循环;如果为假(返回非 0),就执行 do 和 done 之间的命令,然后重新判断条件。也就是说,循环体至少会执行一次。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
常见实用写法示例
-
等待某个端口就绪:比如服务启动后监听 8080 端口
until nc -z localhost 8080; do echo "waiting for port 8080..."; sleep 2; done -
等待文件出现或内容匹配:
until [[ -f "/tmp/ready.flag" ]] || grep -q "success" /var/log/app.log; do sleep 1; done -
提示用户输入,直到输入指定值:
until [[ "$input" == "quit" || "$input" == "exit" ]]; do read -p "Enter command (quit to exit): " input; done -
配合计数器做有限等待(防死循环):
count=0<br>until [ $count -ge 10 ] || ping -c1 -W1 google.com &>/dev/null; do<br> ((count++))<br> echo "Attempt $count: ping failed"<br> sleep 1<br>done
与 while 的关键区别
两者结构相似,但条件含义完全相反:
- while [ condition ]:条件成立(真)时循环,不成立(假)时退出
- until [ condition ]:条件成立(真)时退出,不成立(假)时循环
例如,要等变量 yn 等于 yes 才停止:
- 用 while:写成
while [ "$yn" != "yes" ] - 用 until:直接写
until [ "$yn" == "yes" ],更直观
使用注意事项
- condition 必须是能返回退出状态的命令或测试表达式(如
[ ]、[[ ]]、grep、nc等) - 避免无限循环:建议搭配计数器、超时或明确退出路径(如上面的
ping示例) - 条件中变量需注意引号包裹,防止空值导致语法错误,如
[[ "$input" == "quit" ]] - 循环内修改的变量在循环结束后仍有效,可用于后续判断










