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

Shell——流程控制语句(if、case、for、while等)

在 Shell 编程中,流程控制语句用于控制脚本的执行顺序和逻辑。这些语句包括 ifcaseforwhile 等,它们的使用可以使脚本实现更复杂的逻辑。以下是它们的详细说明和语法结构:

1. if 语句

if 语句用于条件判断,执行符合条件的代码块。

语法结构
if [ condition ]; then# 当 condition 为真时执行的语句
elif [ another_condition ]; then# 当 another_condition 为真时执行的语句
else# 当上述条件都不满足时执行的语句
fi

示例

#!/bin/basha=10
b=20if [ $a -gt $b ]; thenecho "a is greater than b"
elif [ $a -lt $b ]; thenecho "a is less than b"
elseecho "a is equal to b"
fi

2. case 语句

case 语句用于多分支选择,通常用于替代 if-elif-else 结构,当需要判断的条件较多时特别有用。

语法结构
case expression inpattern1)# 当 expression 匹配 pattern1 时执行的语句;;pattern2)# 当 expression 匹配 pattern2 时执行的语句;;*)# 默认情况下执行的语句;;
esac

示例

#!/bin/bashday="Monday"case $day in"Monday")echo "Start of the work week";;"Friday")echo "End of the work week";;"Saturday"|"Sunday")echo "It's the weekend!";;*)echo "Midweek day";;
esac

3. for 循环

for 循环用于遍历列表中的每一个元素,通常用于处理数组或一系列的值。

语法结构
for variable in list; do# 对 list 中的每个 variable 执行的语句
done

示例

#!/bin/bashfor i in 1 2 3 4 5; doecho "Number: $i"
done# 或者使用 C 风格的 for 循环
for ((i=1; i<=5; i++)); doecho "Number: $i"
done

4. while 循环

while 循环在条件为真时重复执行一段代码,直到条件为假时停止。

语法结构
while [ condition ]; do# 当 condition 为真时执行的语句
done

示例

#!/bin/bashcount=1while [ $count -le 5 ]; doecho "Count: $count"count=$((count + 1))
done

5. until 循环

until 循环与 while 循环相反,条件为假时重复执行代码块,直到条件为真时停止。

语法结构
until [ condition ]; do# 当 condition 为假时执行的语句
done

示例

#!/bin/bashcount=1until [ $count -gt 5 ]; doecho "Count: $count"count=$((count + 1))
done

总结

  • if 语句用于条件判断和分支执行。
  • case 语句用于多分支选择,适合匹配多个模式。
  • for 循环用于遍历列表或执行固定次数的循环。
  • whileuntil 循环用于在条件满足时反复执行某些代码。
  • breakcontinue 控制循环的执行流。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQLALchemy ORM 的关联关系之 ORM 中的一对一
  • 2024.8.17
  • 基于DPU云盘挂载的Spark优化解决方案
  • 【Linux网络】高级 I/O
  • 电脑监控怎样看回放视频?一键解锁电脑监控回放,守护安全不留死角!高效员工电脑监控,回放视频随时查!
  • mysql主从复制同步、mysql5.7版本安装配置、python操作mysql数据库、mycat读写分离实现
  • P2016 战略游戏
  • 【Python机器学习】利用PCA来简化数据——示例:利用PCA对半导体制造数据降维
  • 【书生大模型实战营(暑假场)闯关材料】基础岛:第1关 书生大模型全链路开源体系
  • Kubectl 常用命令汇总大全
  • Vue3里如何使用本地lottie动画以及如何更优雅的批量引入图片
  • 在uniapp中使用swicth组件传递额外的参数方法
  • mysql-数据库性能测试之,连接数测试
  • flutter 画转盘
  • 面试准备-C++指针和引用的区别
  • 《Java编程思想》读书笔记-对象导论
  • ECMAScript6(0):ES6简明参考手册
  • ES6系列(二)变量的解构赋值
  • ES6系统学习----从Apollo Client看解构赋值
  • es6要点
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript创建对象的四种方式
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Linux链接文件
  • nodejs:开发并发布一个nodejs包
  • SpringCloud集成分布式事务LCN (一)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 从零开始学习部署
  • 聊聊hikari连接池的leakDetectionThreshold
  • 阿里云移动端播放器高级功能介绍
  • 函数计算新功能-----支持C#函数
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • ​业务双活的数据切换思路设计(下)
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (13)DroneCAN 适配器节点(一)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (Charles)如何抓取手机http的报文
  • (ZT)薛涌:谈贫说富
  • (笔试题)分解质因式
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (多级缓存)多级缓存
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (一) springboot详细介绍
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .pop ----remove 删除
  • @RequestMapping用法详解