目录
[Linux shell 脚本语句](#Linux shell 脚本语句)
[1. for 循环流程控制](#1. for 循环流程控制)
[1.1 基本语法格式](#1.1 基本语法格式)
[1.2 常见用法示例](#1.2 常见用法示例)
[2. while 循环](#2. while 循环)
[2.1 基本语法格式](#2.1 基本语法格式)
[2.2 常见用法示例](#2.2 常见用法示例)
[3. case 语句](#3. case 语句)
[3.1 基本语法格式](#3.1 基本语法格式)
[3.2 常见用法示例](#3.2 常见用法示例)
[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[@]}"