以下是 Bash 中常用的条件语句和循环语句分类及语法说明,附带典型用例:
一、条件语句
1. if
语句
作用:根据条件执行不同代码块
语法:
if [ 条件 ]; then
# 条件为真时执行
elif [ 其他条件 ]; then
# 其他条件为真时执行
else
# 所有条件为假时执行
fi
示例:
if [ -f "/path/file" ]; then
echo "文件存在"
elif [ -d "/path" ]; then
echo "路径是目录"
else
echo "路径无效"
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"; do
echo "水果: $fruit"
done
# 遍历数字范围
for i in {1..5}; do
echo "数字: $i"
done
# 遍历文件
for file in *.txt; do
echo "处理文件: $file"
done
2. while
循环
作用:条件为真时重复执行
语法:
while [ 条件 ]; do
# 循环体
done
示例:
# 基础用法
count=0
while [ $count -lt 5 ]; do
echo "计数: $count"
((count++))
done
# 读取文件逐行处理
while read line; do
echo "行内容: $line"
done < file.txt
# 无限循环(需手动退出)
while true; do
echo "运行中..."
sleep 1
done
3. until
循环
作用:条件为假时重复执行(与 while
相反)
语法:
until [ 条件 ]; do
# 循环体
done
示例:
count=0
until [ $count -ge 5 ]; do
echo "计数: $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; do
if [ -s "$file" ]; then
gzip "$file"
else
rm "$file"
fi
done
2. 用户输入验证
while true; do
read -p "输入密码: " pass
if [ "${#pass}" -ge 8 ]; then
break
else
echo "密码需至少8位!"
fi
done
3. 服务状态监控
until systemctl is-active nginx; do
echo "Nginx 未运行,尝试启动..."
systemctl start nginx
sleep 2
done
六、注意事项
- 空格敏感:
[
和]
内必须加空格(如[ -f file ]
)。 - 变量引号:字符串比较时用
"$var"
避免空值错误。 - 数值比较:用
-eq
、-lt
等,而非==
、<
(适用于[ ]
)。 - 现代语法:
[[ ]]
支持正则和更灵活的逻辑(如[[ $var =~ ^[0-9]+$ ]]
)。
掌握这些语句后,可以覆盖 95% 的 Bash 脚本编写需求!