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

相关推荐
LDR0063 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术3 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园3 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob3 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享3 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.3 天前
C语言--day30
c语言·开发语言
何以解忧,唯有..3 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽3 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下3 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗1113 天前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言