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

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.xdnf.cn/news/15338.html

相关文章:

  • gRPC和http长轮询
  • Python:打造你的HTTP应用帝国
  • 019_工具集成与外部API调用
  • 缺乏实际里程碑管控项目进度,如何设定关键节点
  • 李沐动手学深度学习Pytorch-v2笔记【08线性回归+基础优化算法】2
  • PHP password_hash() 函数
  • Excel常用快捷键与功能整理
  • 当 `conda list` 里出现两个 pip:一步步拆解并卸载冲突包
  • 【时时三省】(C语言基础)用数组名作函数参数
  • MFC中BOOL类型,在某些操作系统中,-1不能被识别,一般是哪些原因?
  • C++-linux 7.文件IO(二)文件描述符、阻塞与非阻塞
  • 招投标——环保大数据平台售后服务计划
  • 现代数据平台能力地图:如何构建未来数据平台的核心能力体系
  • Spark 之 like 表达式
  • uni-app开发的页面跳转全局加载中
  • QT——信号与槽
  • git 访问 github
  • 《恋与深空》中黑白羽毛是谁的代表物?
  • python+Request提取cookie
  • ubuntu22.04下配置qt5.15.17开发环境
  • Elasticsearch9.x核心架构概述
  • 机器学习、深度学习、神经网络之间的关系
  • 多租户云环境下的隔离性保障:虚拟化、容器、安全组如何协同防护?
  • 高德开放平台携手阿里云,面向开发者推出地图服务产品MCP Server
  • Redis技术笔记-主从复制、哨兵与持久化实战指南
  • 工业场合需要千变万化的模拟信号,如何获取?
  • Servlet基础
  • priority_queue的使用和模拟实现以及仿函数
  • FatJar打包和FatJar启动配置文件修改。
  • 对偶原理与蕴含定理