Bash常见条件语句和循环语句
以下是 Bash 中常用的条件语句和循环语句分类及语法说明,附带典型用例:
一、条件语句
1. if
语句
作用:根据条件执行不同代码块
语法:
if [ 条件 ]; then# 条件为真时执行
elif [ 其他条件 ]; then# 其他条件为真时执行
else# 所有条件为假时执行
fi
示例:
if [ -f "/path/file" ]; thenecho "文件存在"
elif [ -d "/path" ]; thenecho "路径是目录"
elseecho "路径无效"
fi
2. case
语句
作用:多分支条件匹配(类似 switch-case
)
语法:
case $变量 in模式1)# 匹配模式1时执行;;模式2|模式3)# 匹配模式2或3时执行;;*)# 默认情况;;
esac
示例:
case $OS in"Linux")echo "使用 apt 安装";;"Darwin")echo "使用 brew 安装";;*)echo "未知系统";;
esac
二、循环语句
1. for
循环
作用:遍历列表或范围
语法:
for 变量 in 列表; do# 循环体
done
示例:
# 遍历列表
for fruit in "apple" "banana" "orange"; doecho "水果: $fruit"
done# 遍历数字范围
for i in {1..5}; doecho "数字: $i"
done# 遍历文件
for file in *.txt; doecho "处理文件: $file"
done
2. while
循环
作用:条件为真时重复执行
语法:
while [ 条件 ]; do# 循环体
done
示例:
# 基础用法
count=0
while [ $count -lt 5 ]; doecho "计数: $count"((count++))
done# 读取文件逐行处理
while read line; doecho "行内容: $line"
done < file.txt# 无限循环(需手动退出)
while true; doecho "运行中..."sleep 1
done
3. until
循环
作用:条件为假时重复执行(与 while
相反)
语法:
until [ 条件 ]; do# 循环体
done
示例:
count=0
until [ $count -ge 5 ]; doecho "计数: $count"((count++))
done
三、循环控制语句
语句 | 作用 | 示例 |
---|---|---|
break | 退出当前循环 | while true; do break; done |
continue | 跳过本次循环进入下一次 | for i in {1..3}; do continue; echo "不会执行"; done |
exit | 退出整个脚本 | if [ ! -f "file" ]; then exit 1; fi |
四、复合条件逻辑
操作符 | 作用 | 示例 |
---|---|---|
&& | 逻辑 AND | [ -f file ] && echo "存在" |
|| | 逻辑 OR | [ -d dir ] || mkdir dir |
! | 逻辑 NOT | if ! [ -x cmd ]; then echo "不可执行"; fi |
五、典型应用场景
1. 文件批量处理
for file in *.log; doif [ -s "$file" ]; thengzip "$file"elserm "$file"fi
done
2. 用户输入验证
while true; doread -p "输入密码: " passif [ "${#pass}" -ge 8 ]; thenbreakelseecho "密码需至少8位!"fi
done
3. 服务状态监控
until systemctl is-active nginx; doecho "Nginx 未运行,尝试启动..."systemctl start nginxsleep 2
done
六、注意事项
- 空格敏感:
[
和]
内必须加空格(如[ -f file ]
)。 - 变量引号:字符串比较时用
"$var"
避免空值错误。 - 数值比较:用
-eq
、-lt
等,而非==
、<
(适用于[ ]
)。 - 现代语法:
[[ ]]
支持正则和更灵活的逻辑(如[[ $var =~ ^[0-9]+$ ]]
)。
掌握这些语句后,可以覆盖 95% 的 Bash 脚本编写需求!