当前位置: 首页 > news >正文

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

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


一、条件语句

1. if 语句

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

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

示例

if [ -f "/path/file" ]; thenecho "文件存在"
elif [ -d "/path" ]; thenecho "路径是目录"
elseecho "路径无效"
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"; doecho "水果: $fruit"
done# 遍历数字范围
for i in {1..5}; doecho "数字: $i"
done# 遍历文件
for file in *.txt; doecho "处理文件: $file"
done
2. while 循环

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

while [ 条件 ]; do# 循环体
done

示例

# 基础用法
count=0
while [ $count -lt 5 ]; doecho "计数: $count"((count++))
done# 读取文件逐行处理
while read line; doecho "行内容: $line"
done < file.txt# 无限循环(需手动退出)
while true; doecho "运行中..."sleep 1
done
3. until 循环

作用:条件为假时重复执行(与 while 相反)
语法

until [ 条件 ]; do# 循环体
done

示例

count=0
until [ $count -ge 5 ]; doecho "计数: $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
!逻辑 NOTif ! [ -x cmd ]; then echo "不可执行"; fi

五、典型应用场景

1. 文件批量处理
for file in *.log; doif [ -s "$file" ]; thengzip "$file"elserm "$file"fi
done
2. 用户输入验证
while true; doread -p "输入密码: " passif [ "${#pass}" -ge 8 ]; thenbreakelseecho "密码需至少8位!"fi
done
3. 服务状态监控
until systemctl is-active nginx; doecho "Nginx 未运行,尝试启动..."systemctl start nginxsleep 2
done

六、注意事项

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

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

http://www.dtcms.com/a/278584.html

相关文章:

  • rk3588平台USB 3.0 -OAK深度相机适配方法
  • springboot 好处
  • [Nagios Core] 事件调度 | 检查执行 | 插件与进程
  • JAVA 设计模式 适配器
  • 八、nginx搭建,实现vue跳转nginx跳转gateway
  • Java设计模式(java design patterns)
  • 概率论与数理统计(二)
  • Maven+Spring
  • 在Maven多模块项目中进行跨模块的SpringBoot单元测试
  • 【橘子分布式】Thrift RPC(理论篇)
  • vscode 安装 esp ide环境
  • LeetCode-283. 移动零(Java)
  • 【STM32】什么在使能寄存器或外设之前必须先打开时钟?
  • Pandas-特征工程详解
  • 零基础入门Java虚拟机与单例模式:新手友好教程
  • Modbus 开发工具实战:ModScan32 与 Wireshark 抓包分析(二)
  • VSCODE 选中多行 需要同时按住alt键才可以
  • ShenYu实战、问题记录
  • 记字节前端面试一道简单的算法题
  • 注解@Autowired和@Resource的区别
  • CentOS7 OpenSSL升级1.1.1t;OpenSSH 升级 9.8p1 保姆级教程
  • jenkins 流水线比较简单直观的
  • 《每日AI-人工智能-编程日报》--2025年7月14日
  • Spring Boot - Spring Boot 集成 MyBatis 分页实现 PageHelper
  • 17.Python 中的相等性比较:== vs is
  • 具身智能零碎知识点(五):VAE中对使用KL散度的理解
  • 【Java EE初阶 --- 网络原理】初识网络
  • flink 和 spark 架构的对比
  • 如何在 Java 中使用 Redis 实现缓存优化?
  • 4G模块 A7670发送英文短信到手机