Linux shell 脚本基础 003

目录

[Linux shell 脚本语句](#Linux shell 脚本语句)

[1. for 循环流程控制](#1. for 循环流程控制)

[1.1 基本语法格式](#1.1 基本语法格式)

[1.2 常见用法示例](#1.2 常见用法示例)

1.3生产案例示例

[2. while 循环](#2. while 循环)

[2.1 基本语法格式](#2.1 基本语法格式)

[2.2 常见用法示例](#2.2 常见用法示例)

[3. case 语句](#3. case 语句)

[3.1 基本语法格式](#3.1 基本语法格式)

[3.2 常见用法示例](#3.2 常见用法示例)

3.3生产案例示例

[4. shell 函数](#4. shell 函数)

[4.1 函数的定义](#4.1 函数的定义)

[4.2 函数的调用](#4.2 函数的调用)

[4.3 函数的参数](#4.3 函数的参数)

[4.4 函数的返回值](#4.4 函数的返回值)

[5. 数组](#5. 数组)

[5.1 数组的定义](#5.1 数组的定义)

[5.2 数组的访问](#5.2 数组的访问)

[5.3 数组元素的修改与删除](#5.3 数组元素的修改与删除)


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以外的数字就会提示

4. shell 函数

shell 函数是将一系列命令组合在一起并赋予名称的代码块,它可以实现代码的复用,让脚本结构更清晰,便于维护和修改。

4.1 函数的定义

shell 函数有两种常见的定义方式:

方式一:

函数名() {

函数体(一系列命令)

}

方式二:

function 函数名 {

函数体(一系列命令)

}

其中,函数名遵循 shell 变量的命名规则,由字母、数字和下划线组成,不能以数字开头。函数体包含实现特定功能的命令序列。

4.2 函数的调用

定义好函数后,直接使用函数名即可调用该函数,无需加括号。

示例:定义一个输出欢迎信息的函数

执行脚本后,会输出 "欢迎使用本脚本!"。

4.3 函数的参数

函数可以接收参数,在函数内部通过1、2...... 来获取参数,0表示函数名本身,#表示参数的个数。

示例:定义一个计算两数之和的函数

执行后输出 "3 + 5 = 8"。

4.4 函数的返回值

函数可以通过return语句返回一个整数(0-255)。也可以通过 echo 输出结果,在调用时用变量接收。

示例:有返回值的函数

5. 数组

数组是 shell 中用于存储多个值的变量类型,它可以存储不同类型的数据,方便对一组相关数据进行管理和操作。

5.1 数组的定义

在 shell 中,数组的定义方式较为灵活,常见的有以下几种:

  • 方式一:直接定义数组元素

数组名=(元素1 元素2 元素3 ...)

示例:

fruits=("apple" "banana" "orange" "grape")

  • 方式二:单独为数组元素赋值

数组名[索引]=元素

示例:

numbers[0]=10

numbers[1]=20

numbers[2]=30

其中,数组的索引从 0 开始。

5.2 数组的访问

访问数组元素时,使用{数组名\[索引\]}的格式,若要访问数组中的所有元素,使用{数组名[@]}或${数组名[*]}。

示例:

5.3 数组的遍历

可以使用 for 循环遍历数组中的所有元素。

示例:

执行后依次输出数组中的每个元素。

5.3 数组元素的修改与删除

  • 修改数组元素:直接为指定索引的元素重新赋值

fruits[1]="watermelon"

echo "修改后的第二个水果:${fruits[1]}"

  • 删除数组元素:使用unset命令

unset fruits[2]

echo "删除第三个元素后的水果:${fruits[@]}"

相关推荐
小蒜学长5 小时前
汽车专卖店管理系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·汽车
lypzcgf5 小时前
Coze源码分析-工作空间-项目开发-前端源码
前端·人工智能·typescript·系统架构·开源软件·react·安全架构
yuguo.im5 小时前
Chrome DevTools Performance 是优化前端性能的瑞士军刀
前端·javascript·性能优化·chrome devtools
catcfm7 小时前
Java学习笔记-泛型
java·笔记·学习
FSHOW7 小时前
【独立开发日记】MQ端到端类型安全
前端·javascript·后端
老华带你飞7 小时前
社区互助|基于SSM+vue的社区互助平台的设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·小程序·毕设·社区互助平台
一支鱼7 小时前
前端使用次数最多的工具封装
前端·typescript·编程语言
GIS之路7 小时前
GDAL 简介
前端
前端工作日常8 小时前
单元测试与E2E测试中使用浏览器的原因及区别
前端·单元测试