Linux中while循环的核心逻辑是“条件为真时持续执行”,即测试表达式返回0时反复运行,条件不成立则立即退出;适用于终止时机不确定、需动态判断的场景。

Linux 中 while 循环的核心逻辑是“条件为真时持续执行”,只要测试表达式返回退出状态 0(即判断为真),循环体就会反复运行;一旦条件不成立,立即退出。它适合处理那些终止时机不确定、需动态判断的场景。
while 循环的基本结构和关键要点
语法格式固定:
while [ 条件表达式 ]
do
命令序列
done
注意三点:
- 方括号 [ ] 内外必须有空格,例如 [ $i -lt 10 ] 不能写成 [$i-lt10]
- 条件表达式可以是数值比较(-eq、-gt)、字符串判断(=、!=)或任意命令(如 ps aux | grep nginx)
- 循环体内必须修改影响条件的变量或状态,否则会陷入死循环
实现持续运行的常见方式
当需要脚本长期运行(比如监控、轮询、等待事件),常用以下写法构建“永真”条件:
-
while true; do ...; done—— 最清晰直观,推荐日常使用 -
while :; do ...; done——:是 Shell 内置空命令,永远返回 0,更简洁 -
while [ 1 -eq 1 ]; do ...; done—— 显式数值恒等,可读性稍弱但逻辑明确
这类结构本身不会自动退出,必须在循环体内加入 break、exit 或信号捕获(如 trap)来控制退出时机。
实际可用的持续运行示例
例如:每 2 秒检查一次某个进程是否存在,存在则继续等待,不存在就退出并提示:
#!/bin/bash<br> while pgrep "nginx" > /dev/null; do<br> echo "nginx 正在运行,继续监听..."<br> sleep 2<br> done<br> echo "nginx 已停止,脚本退出"
再如:等待用户输入特定关键字才继续:
while [[ "$input" != "quit" ]]; do<br> read -p "请输入命令(输入 quit 退出): " input<br> if [[ "$input" == "status" ]]; then<br> echo "当前状态正常"<br> fi<br> done
避免常见陷阱
容易出错的地方集中在条件设计和变量更新上:
- 忘记在循环中改变判断依据(比如没写
i=$((i+1))),导致无限执行 - 用
==做数值比较(应使用-eq),或在[ ]中漏掉空格 - 用
$(cat file)或$(ls)构造条件时未处理空值或含空格文件名,引发语法错误 - 在管道中使用 while(如
cat log.txt | while read line)会导致变量作用域受限,建议改用重定向while read line; do ...; done











