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 脚本编写需求!

相关推荐
zmzb010310 分钟前
C++课后习题训练记录Day175
开发语言·c++
脱胎换骨-军哥1 小时前
C++ 代码规范与格式化指南
开发语言·c++·代码规范
枕星而眠1 小时前
C++ STL Map容器完全指南:从有序红黑树到无序哈希表
java·开发语言
爱吃牛肉的大老虎2 小时前
Rust对象之结构体,枚举,特性
开发语言·后端·rust
bbq粉刷匠2 小时前
HashMap 底层原理深度拆解(二):putVal 完整链路解析(懒加载 · 链表遍历 · 尾插法)
java·开发语言·哈希算法
@三十一Y3 小时前
C++:红黑树的实现
开发语言·c++
乐观勇敢坚强的老彭4 小时前
C++信奥:开关门、开关灯问题
开发语言·c++·算法
冻柠檬飞冰走茶4 小时前
PTA基础编程题目集 7-31 字符串循环左移(C语言实现)
c语言·开发语言·数据结构·算法
a1117764 小时前
中文优先的企业 RAG 知识库 开源项目
开发语言·开源·kotlin
破z晓5 小时前
javascript 导出excel表
开发语言·javascript·excel