当前位置: 首页 > 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.lryc.cn/news/587897.html

相关文章:

  • vLLM与SGLang在自然语言处理领域的技术架构与性能对比研究
  • 从数据库到播放器:Java视频续播功能完整实现解析
  • cuda优化之softmax
  • 调用 System.runFinalizersOnExit() 的风险与解决方法
  • JavaScript 与 C语言基础知识差别
  • Spark 单机模式安装与测试全攻略​
  • 【HTML】五子棋(精美版)
  • 数据采集卡选型——PCIE和USB型采集卡对比
  • C++类模版与友元
  • java--ThreadLocal创建以及get源码解析
  • [Pytorch]深度学习-part1
  • QT跨平台应用程序开发框架(7)—— 常用输入类控件
  • 消费 Kafka 一个TOPIC数据,插入到另一个KAFKA的TOPIC
  • Docker配置国内镜像源
  • CompletableFuture 源码解析
  • Linux 系统下的 Sangfor VDI 客户端安装与登录完全攻略 (CentOS、Ubuntu、麒麟全线通用)
  • HTTP协议版本对比
  • Apache部署
  • Ubuntu-25.04 Wayland桌面环境安装Anaconda3之后无法启动anaconda-navigator问题解决
  • Can201-Introduction to Networking:Data Plane数据平面
  • vue2/3生命周期使用建议
  • hive的相关的优化
  • Linux 系统管理基础教程
  • 图像分割论文中的评价指标
  • 从零实现一个基于 mem0的具有长期记忆的Text2SQL代理
  • R 语言科研绘图第 64 期 --- 哑铃图
  • 当前(2024-07-14)视频插帧(VFI)方向的 SOTA 基本被三篇顶会工作占据,按“精度-速度-感知质量”三条线总结如下,供你快速定位最新范式
  • 设计模式》》门面模式 适配器模式 区别
  • js与vue基础学习
  • Linux 基础命令详解:从入门到实践(1)