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

相关推荐
2601_966949653 小时前
从轮询到策略消费:量化系统如何高效处理五档盘口数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
我命由我123454 小时前
人脸识别 - 去重时间窗口
java·开发语言·python·学习·java-ee·学习方法·python3.11
落魄大学生之流水线上谋生计4 小时前
Java并发核心机制详解:线程池、CAS、AQS、锁升级
java·开发语言·数据库
hahaha60164 小时前
HLS高层次综合设计技巧--数组
开发语言·嵌入式硬件·算法·fpga开发
hanchenxing4 小时前
自动化脚本“卡住无输出“怎么办: 一次 WebSocket 挂死的排查与自愈模板
运维·javascript·chrome·websocket·自动化·自动化爬虫
佳児素花痴╮4 小时前
Qt速通2
开发语言·qt
“AI国潮设计-小江”5 小时前
【Python/SDXL实战】潮汕国潮IP视觉落地:普宁英歌舞猫IP & 创意甜品设计(附ComfyUI工作流与商业授权说明)
开发语言·人工智能·python·prompt·aigc
529宝宝起名网5 小时前
用 Python 分析汉字字源与起名用字的关联规律:从六书结构到文化寓意的起名偏好洞察
开发语言·python
linx2955 小时前
单元九 · 零基础路线图-第 7–9 周·类与 RAII
c语言·开发语言·数据结构·c++·嵌入式硬件·算法
白色的北极熊6 小时前
c语言 输出菱形字符串
c语言·开发语言