until循环用于条件为假时执行、为真时停止,与while逻辑相反;语法为until [条件]; do 命令; done,适用于等待文件生成、服务启动等场景。

Until 循环在 Linux Shell 脚本中用于“条件不成立时反复执行,一旦条件成立就停止”,和 while 循环逻辑相反。它的核心是:先判断条件,如果条件为假(返回状态码非 0),就执行循环体;条件为真(返回状态码 0)时,立即退出循环。
基本语法结构
格式如下:
until [ 条件 ]; do
# 条件为假时执行的命令
done
注意:
- [ ] 是 test 命令的简写,等价于 test,支持字符串比较、数字比较、文件测试等。
- 条件表达式必须能返回退出状态(0 表示真,非 0 表示假),这是 until 判断的依据。
- do 和 done 必须成对出现,且不能省略。
常见使用场景与写法
- 等待某个文件出现:
until [ -f /tmp/ready.flag ]; do<br> echo "等待标志文件..."; sleep 2;<br>done<br>echo "文件已生成,继续执行"
- 等待端口监听启动(配合 nc 或 ss):
until nc -z localhost 8080; do<br> echo "服务未就绪,重试中..."; sleep 1;<br>done
- 倒计时或递减控制:
i=5<br>until [ $i -lt 0 ]; do<br> echo "剩余: $i"<br> i=$((i - 1))<br>done
关键细节提醒
- 条件判断失败(即返回非 0)才进入循环体,别和 while 混淆。
- 确保循环体内有能影响条件变化的操作,否则可能无限循环。
- 推荐用
[ ]而不是[[ ]]保证 POSIX 兼容性,除非明确使用 bash 且需要高级特性。 - 条件中变量记得加引号防空值报错,例如
[ -n "$var" ]。
对比 while 更直观的理解方式
这段 until:
until [ $x -eq 10 ]; do
echo $x
x=$((x + 1))
done
等价于这个 while:
while [ $x -ne 10 ]; do
echo $x
x=$((x + 1))
done
本质是把“继续条件”取了反 —— until 的“条件成立即停”,就是 while 的“条件不成立才继续”。











