Bash常见条件语句和循环语句

以下是 Bash 中常用的条件语句和循环语句分类及语法说明,附带典型用例:


一、条件语句

1. if 语句

作用 :根据条件执行不同代码块
语法

bash 复制代码
if [ 条件 ]; then
    # 条件为真时执行
elif [ 其他条件 ]; then
    # 其他条件为真时执行
else
    # 所有条件为假时执行
fi

示例

bash 复制代码
if [ -f "/path/file" ]; then
    echo "文件存在"
elif [ -d "/path" ]; then
    echo "路径是目录"
else
    echo "路径无效"
fi
2. case 语句

作用 :多分支条件匹配(类似 switch-case
语法

bash 复制代码
case $变量 in
    模式1)
        # 匹配模式1时执行
        ;;
    模式2|模式3)
        # 匹配模式2或3时执行
        ;;
    *)
        # 默认情况
        ;;
esac

示例

bash 复制代码
case $OS in
    "Linux")
        echo "使用 apt 安装"
        ;;
    "Darwin")
        echo "使用 brew 安装"
        ;;
    *)
        echo "未知系统"
        ;;
esac

二、循环语句

1. for 循环

作用 :遍历列表或范围
语法

bash 复制代码
for 变量 in 列表; do
    # 循环体
done

示例

bash 复制代码
# 遍历列表
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 循环

作用 :条件为真时重复执行
语法

bash 复制代码
while [ 条件 ]; do
    # 循环体
done

示例

bash 复制代码
# 基础用法
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 相反)
语法

bash 复制代码
until [ 条件 ]; do
    # 循环体
done

示例

bash 复制代码
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. 文件批量处理
bash 复制代码
for file in *.log; do
    if [ -s "$file" ]; then
        gzip "$file"
    else
        rm "$file"
    fi
done
2. 用户输入验证
bash 复制代码
while true; do
    read -p "输入密码: " pass
    if [ "${#pass}" -ge 8 ]; then
        break
    else
        echo "密码需至少8位!"
    fi
done
3. 服务状态监控
bash 复制代码
until systemctl is-active nginx; do
    echo "Nginx 未运行,尝试启动..."
    systemctl start nginx
    sleep 2
done

六、注意事项

  1. 空格敏感[] 内必须加空格(如 [ -f file ])。
  2. 变量引号 :字符串比较时用 "$var" 避免空值错误。
  3. 数值比较 :用 -eq-lt 等,而非 ==<(适用于 [ ])。
  4. 现代语法[[ ]] 支持正则和更灵活的逻辑(如 [[ $var =~ ^[0-9]+$ ]])。

掌握这些语句后,可以覆盖 95% 的 Bash 脚本编写需求!

相关推荐
小红帽2.027 分钟前
从零构建一款开源在线客服系统:我的Go语言实战之旅
开发语言·golang·开源
slim~28 分钟前
Java基础第9天总结(可变参数、Collections、斗地主)
java·开发语言
ComputerInBook1 小时前
C++编程语言:标准库:第37章——正则表达式(Bjarne Stroustrup)
开发语言·c++·正则表达式
A尘埃2 小时前
智能工单路由系统(Java)
java·开发语言·智能工单
Source.Liu2 小时前
【Python基础】 13 Rust 与 Python 注释对比笔记
开发语言·笔记·python·rust
qq_195551692 小时前
代码随想录70期day3
开发语言·python
XXYBMOOO2 小时前
Qt UDP 通信类详解与实现
开发语言·网络·c++·qt·网络协议·ui·udp
pusue_the_sun2 小时前
C语言强化训练(12)
c语言·开发语言·算法
counting money3 小时前
JAVA泛型基础
java·开发语言·eclipse
007php0073 小时前
Go语言面试:传值与传引用的区别及选择指南
java·开发语言·后端·算法·面试·golang·xcode