until是Linux Shell中条件为真时退出的循环语句,语法为until 命令; do 命令; done,常用于等待文件、端口或服务就绪,需确保条件终将满足并建议添加sleep避免忙等。

until 是 Linux Shell 中的循环语句,和 while 相反:它在条件不成立时执行循环体,一旦条件成立就立即退出。可以理解为“直到条件为真才停止”。
基本语法结构
格式如下:
until 条件判断命令; do
循环体命令
done
注意:条件判断命令返回状态码 0(即“真”)时,循环结束;非 0(即“假”)时继续执行循环体。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
常见使用场景与写法
- 等待某个文件出现:比如监控日志生成
- 等待服务端口就绪:适合容器启动后检查依赖服务
- 配合命令执行结果判断:如 curl 检查 HTTP 状态
until [ -f /tmp/ready.flag ]; do
echo "等待标志文件..."
sleep 2
done
echo "文件已出现,继续执行"
until nc -z localhost 8080; do
echo "等待端口 8080 开放..."
sleep 1
done
echo "服务已就绪"
until curl -s --head http://localhost:3000/ | grep "200 OK" > /dev/null; do
echo "应用尚未响应..."
sleep 3
done
</font></ul><H3>关键细节提醒</H3><ul><li>条件部分必须是能返回退出状态的命令,不能直接写 <code>[ condition ]</code> 以外的表达式(如 <code>$i < 10</code> 不合法,要用 <code>[ $i -lt 10 ]</code>)</li><li>循环体中一定要有能让条件最终变为“真”的操作,否则会无限循环</li><li>建议加 <code>sleep</code> 避免高频轮询,尤其用于等待类场景</li><li>可结合 <code>break</code> 或 <code>exit</code> 在循环体内主动跳出,但通常不必要</li></ul><H3>对比 while 更直观的理解</H3><p>下面两段逻辑等价:</p><font face="monospace"><pre class="brush:php;toolbar:false;">
# until 写法:直到文件存在就停
until [ -f /tmp/done ]; do
sleep 1
done
<h1>while 写法:当文件不存在时继续</h1><p>while [ ! -f /tmp/done ]; do
sleep 1
done</p>可见 until 更贴近自然语言中的“直到……为止”,适合强调“达成目标即退出”的场景。

















