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

Linux shell 脚本基础 003

Linux shell 脚本语句

1. for 循环流程控制

for 循环是 shell 脚本中用于重复执行一系列命令的流程控制结构,适合对列表中的每个元素执行相同或相似的操作。

1.1 基本语法格式

for 变量名 in 列表

do

    循环体命令

done

其中,“变量名” 会依次取 “列表” 中的每个值,每次取值后执行 “循环体命令”,直到列表中的元素全部处理完毕。

还有第2种写法

for ((初始值; 限制值; 执行步长))

do

        程序段

done

解释:

初始值:即循环初始值。例如:i=1

限制值:即循环条件。例如:i<=5

执行步长:即循环初始值修改。例如:i++

1.2 常见用法示例

  • 遍历固定列表:列表为明确的多个值,用空格分隔。

比如,遍历水果列表并输出

执行后会依次输出 “我喜欢的水果:apple”“我喜欢的水果:banana”“我喜欢的水果:orange”。

遍历文件列表:列表为某个目录下的文件

比如我要找当前目录下的文本文件

若当前目录有 11.txt、ip.txt,会输出对应的文件名。

遍历数字范围:使用 “{起始值.. 结束值}” 表示数字范围。

比如输出1到5的数字

就会分别输出数字1到5

1.3生产案例示例

比如,我要统计 /var/log 有多少个文件,并且显示这些文件名,输入以下命令

这边分别解释一下这些

1. sum=0​​

​作用:初始化变量 sum 为 0,用于后续统计文件数量。

2. for i in $(ls -r *); do​​

ls:列出目录内容。

-r:逆序排序(从 Z 到 A)。

*:匹配所有文件和目录(不包括隐藏文件)。

3.if [ -f "$i" ]; then​​

​​-f "$i"检查 $i 是否是普通文件(不是目录、链接等)。

​​注意:变量 $i 必须用双引号包裹("$i"),避免文件名含空格时出错。

​4. let sum++​​

​​作用计数器 sum 加 1。

然后运行

2. while 循环

while 循环也是一种循环结构,它根据条件判断结果来决定是否重复执行循环体,只要条件为真,就会一直执行,直到条件为假时停止。

2.1 基本语法格式

while 条件判断

do

    循环体命令

done

每次执行循环前都会先判断 “条件判断” 的结果,若结果为真(返回 0),则执行 “循环体命令”;若为假(返回非 0),则退出循环。

2.2 常见用法示例

  • 基本条件循环:通过条件控制循环次数。比如从1数到5

执行后会依次输出 1 到 5 的计数。

  • 无限循环:在语句在满足特定条件时退出无限循环。

其中 exit 0 为退出循环,当我只要输入的字符不是yes 则不会退出循环

3. case 语句

case 语句用于多分支条件判断,它将一个变量与多个模式进行匹配,当匹配到某个模式时,执行对应的命令块,适合处理多种固定的选择场景。

3.1 基本语法格式

case 变量 in

    模式1)

        命令块1

        ;;

    模式2)

        命令块2

        ;;

    模式n)

        命令块n

        ;;

    *)

        默认命令块  # 当变量与所有模式都不匹配时执行

        ;;

esac

“变量” 会依次与每个 “模式” 进行比较,匹配成功则执行对应的 “命令块”,每个命令块以 “;;” 结束;“*” 表示默认模式,匹配所有未被前面模式匹配的情况。

3.2 常见用法示例

  • 简单菜单选择:根据用户输入的选项执行不同操作。比如查看当前目录,今天的日期

当用户输入 1 时,执行 ls -l 查看目录;输入 2 时,执行 date 查看时间;输入 3 时退出;输入其他内容时提示无效选项。

3.3生产案例示例

比如我要用case查看系统硬件的负载情况的信息(cpu,内存,磁盘)

保存以后分别运行,比如我输入1,就可以查看cpu的负载情况

我输入2,就可以查看内存的负载情况

输入1,2,3,4以外的数字就会提示

http://www.xdnf.cn/news/19485.html

相关文章:

  • C6.7:输入电阻的负载效应及其CE负反馈放大器
  • android-studio 安装
  • Mysql中事务隔离级别有哪些?
  • Java实习:MySQL篇(黑马JavaWeb课程)
  • 简单的加密算法
  • PostgreSQL表膨胀的危害与解决方案
  • 人工神经网络(ANN)深度学习
  • 开源 C++ QT Widget 开发(九)图表--仪表盘
  • dayjs ​JavaScript 时间日期处理库
  • P2P技术应用:去中心化
  • Java全栈开发面试实战:从基础到微服务的全面解析
  • NAS Docker 安装N8N
  • 鸿蒙ArkTS 核心篇-18-@Builder 自定义构建函数
  • 上海交大具身导航中的感知智能、社会智能和运动智能全面综述
  • 数值分析——非线性方程与方程组的数值解法之二分法
  • APB协议​​ 构建一个完整的 ​​UVM验证VIP Agent介绍类的要素
  • 壁纸、logo、短视频去水印
  • 前端常见安全问题 + 防御方法 + 面试回答
  • Qt QML连接数据库如何解决重复创建连接问题
  • 大话 IOT 技术(3) -- MQTT篇
  • Qt中使用 GStreamer 播放视频文件
  • HikariCP vs DBCP2 vs Tomcat JDBC:多场景数据库连接池方案对比与实践指南
  • 局域网中使用Nginx部署https前端和后端
  • Qt中解析XML文件
  • word中插入字符后会自动删除后面的字符
  • Visual Studio Code中launch.json的解析笔记
  • Prometheus之启用--web.enable-remote-write-receiver
  • 对于一个多层感知机,参数初始化的时候不是已经把权重的范围根据方差进行优化过了,为什么还要进行正则化惩罚过大权重
  • springboot整合minio实现上传下载搭建minio
  • Unity转抖音小游戏重点摘记