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.pswp.cn/bicheng/89171.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app 选择国家区号

uni-app选择国家区号组件 hy-countryPicker 我们在做登录注册功能的时候&#xff0c;可能会遇到选择区号来使用不同国家手机号来登录或者注册的功能。这里我就介绍下我这个uni-app中使用的选择区号的组件&#xff0c;包含不同国家国旗图标。 效果图 别的不说&#xff0c;先来…

客户端主机宕机,服务端如何处理 TCP 连接?详解

文章目录一、客户端主机宕机后迅速重启1、服务端有数据发送2、服务端开启「保活」机制3、服务端既没有数据发送&#xff0c;也没有开启「保活」机制二、客户端主机宕机后一直没有重启1、服务端有数据发送2、服务端开启「保活」机制3、服务端既没有数据发送&#xff0c;也没有开…

《大数据技术原理与应用》实验报告五 熟悉 Hive 的基本操作

目 录 一、实验目的 二、实验环境 三、数据集 四、实验内容与完成情况 4.1 创建一个内部表 stocks&#xff0c;字段分隔符为英文逗号&#xff0c;表结构下所示。 4.2 创建一个外部分区表 dividends&#xff08;分区字段为 exchange 和symbol&#xff09;&#xff0c;字段…

【橘子分布式】Thrift RPC(编程篇)

一、简介 之前我们研究了一下thrift的一些知识&#xff0c;我们知道他是一个rpc框架&#xff0c;他作为rpc自然是提供了客户端到服务端的访问以及两端数据传输的消息序列化&#xff0c;消息的协议解析和传输&#xff0c;所以我们今天就来了解一下他是如何实现这些功能&#xff…

清理C盘--办法

c盘经常爆红1、命令行2、属性3、临时文件

Java-71 深入浅出 RPC Dubbo 上手 父工程配置编写 附详细POM与代码

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; AI炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有…

创客匠人:创始人 IP 打造的内核,藏在有效的精神成长里

当创始人 IP 成为企业增长的重要引擎&#xff0c;许多人急于寻找 “爆款公式”&#xff0c;却忽略了一个更本质的问题&#xff1a;IP 的生命力&#xff0c;终究源于创始人的精神成长。创客匠人在深耕知识付费赛道的过程中&#xff0c;见证了无数案例&#xff1a;那些能持续实现…

GPT和MBR分区

GPT&#xff08;GUID分区表&#xff09;和MBR&#xff08;主引导记录&#xff09;是两种不同的磁盘分区表格式&#xff0c;用于定义硬盘上分区的布局、位置及启动信息&#xff0c;二者在设计、功能和适用场景上有显著差异。以下从多个维度详细对比&#xff1a; 一、核心定义与起…

c#进阶之数据结构(字符串篇)----String

1、String介绍首先我们得明白&#xff0c;string和String代表的实际上是同一个类型&#xff0c;string是C#中的关键字&#xff0c;代表String类型&#xff0c;因此我们直接来学习String类型。从官方的底层实现代码可以看出&#xff0c;当前String类型实际上就是一个Char类型的聚…

快速排序递归和非递归方法的简单介绍

基本思想为&#xff1a;任取待排序元素序列中 的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;右 子序列中所有元素均大于基准值&#xff0c;然后最左右子序列重复该过程&#xff0c;直到所有元…

从零开始的云计算生活——第三十二天,四面楚歌,HAProxy负载均衡

目录 一.HAProxy简介 二.HAProxy特点和优点&#xff1a; 三.HAProxy保持会话的三种解决方法 四.HAProxy的balance 8种负载均衡算法 1&#xff09;RR&#xff08;Round Robin&#xff09; 2&#xff09;LC&#xff08;Least Connections&#xff09; 3&#xff09;SH&am…

策略模式及优化

策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;其核心思想是将算法的定义与使用分离&#xff0c;使算法可以独立于客户端进行变化。它通过定义一系列算法&#xff0c;将每个算法封装到独立的类中&#xff0c;并使它们可以互相替换&#xff0…

微信小程序开发-桌面端和移动端UI表现不一致问题记录

桌面端和移动端UI表现不一致零、引擎说明一、样式不同1、text 单行&#xff1a;1.1 空格开发者工具不展示&#xff0c;手机/PC端正常1.2 正常展示省略号&#xff0c;需要2、点击按钮z-index: -1。webview - 桌面端不行&#xff0c; skyline - 移动端可以&#xff1b;3、其他说明…

极限状态下函数开根号的计算理解(含示意图)

遇到一个挺有意思的题做个记录&#xff1a; 求曲线y (x21)(x2−1)0.5\frac{\left(x^{2}1\right)}{\left(x^{2}-1\right)^{0.5}}(x2−1)0.5(x21)​渐近线的条数 比较明显的x 1是无定义点。但是在求极限的时候发现1和1-得到的极限值似乎不一样。似乎是1是趋向于∞&#xff0c;1…

C++——模版(函数模版和类模版)

C 模板&#xff08;Templates&#xff09;完整介绍模板是 C 中一种强大的泛型编程机制&#xff0c;允许开发者编写与类型无关的代码&#xff0c;从而提高代码的复用性和灵活性。通过模板&#xff0c;可以避免为不同数据类型重复编写相似的函数或类&#xff0c;实现真正的代码复…

Python之cv2:cv2(OpenCV,opencv-python)库pip下载超时、下载失败、无法下载的解决方案大全

Python之cv2&#xff1a;cv2(OpenCV&#xff0c;opencv-python)库pip下载超时、下载失败、无法下载的解决方案大全 在学习和使用 OpenCV&#xff08;Python 包名&#xff1a;opencv-python 或简称 cv2&#xff09;的过程中&#xff0c;很多初学者常常会遇到通过 pip install o…

asyncio 与 uvloop

事件循环 事件循环 协调所有协程执行的中央调度器&#xff0c;它通过非阻塞机制&#xff0c;实现并发执行多个异步任务。 事件循环是 异步编程的核心机制&#xff0c;用一句话概括就是&#xff1a; 事件循环不断检查任务队列&#xff0c;一旦某个异步任务完成&#xff0c;它…

一文读懂循环神经网络(RNN)—语言模型+n元语法(1)

目录 什么是语言模型&#xff1f; 语言模型的核心目的 一.量化文本的合理性 二.支持下游 NLP 任务 三. 语义和上下文依赖 一元语法、二元语法和三元语法详解 核心概念&#xff1a;n-gram 模型 1. 一元语法&#xff08;Unigram&#xff09; 2. 二元语法&#xff08;Bigram…

DirectX12(D3D12)基础教程九 间接绘制

在学习directx12 microsoft提供了很多示例&#xff0c;有简单的也有复杂,下载网址&#xff1a;https://github.com/microsoft/DirectX-Graphics-Samples 本章对D3D12ExecuteIndirect 示例做了简化&#xff0c;只保留间接绘制部分&#xff0c;删除了计算着色器部分。 间接绘制…

fastApi连接数据库

1&#xff1a;pip install tortoise-orm2&#xff1a;pip install aiomysql3&#xff1a;pip install asyncmy或者使用国内清华园pip install -i https://pypi.tuna.tsinghua.edu.cn/simple asyncmy4&#xff1a;pip install aerich通过 python -m 直接运行&#xff08;推荐&a…