一、函数
在编写脚本时,有些脚本可以反复使用,可以调用函数来解,语句块定义成函数约等于别名
1. 函数的使用方法
1. 定义函数
2. 再引用函数
2. 函数的基本格式
格式一:
[function] 函数名 {
命令序列
[return x] #使用return或者exit可以显式的结束函数
}
格式二:
函数名(){
命令序列
}
格式三:
function 函数名 (){
命令序列
}
注意事项:
1. 直接写 函数中调用函数 直接写函数名
2. 同名函数 后一个生效
3. 调用函数一定要先定义
4. 每个函数是独立
3. 函数列表
declare -A
#声明关联属组
declare -F
#查看当前已定义的函数名
declare -f
#查看已定义的函数定义
declare -f func_name
#查看指定当前已定义的函数名
declare -F func_name
#查看当前已定义的函数名定义
unset 函数名
#删除函数
4. 函数的返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
使用原则:
-
函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
-
退出码必须是0-255,超出的值将为除以256取余
5. 函数的传参数
6. 函数的作用范围
函数在shell脚本中仅在当前的shell环境中有效
shell脚本中函数的变量默认全局有效
将变量限定在函数内部使用local命令
7. 函数递归
1. 函数调用自己本身的函数
2. 必须要有结束函数的语句,防止死循环
阶乘
二、数组
数组(Array)是一种常见的数据结构,用于存储多个相同类型的元素。数组可以按照一定的顺序存储元素,并通过索引访问和修改元素。
变量和数组
-
变量:存储单个元素的内存空间
-
数组:存储多个元素的连续的内存空间,相当于多个变量的集合
数组名和索引
-
索引的编号从0开始,属于数值索引
-
索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash 4.0版本之后开始支持
-
bash的数组支持稀疏格式(索引不连续)
1. 数组的定义
定义数组格式
-
数组名=(value0 value1 value2 value3 ......)
-
数组名=([0]=value [1]=value1 [2]=value2 ....)
-
列表名="value0 value1 value2 value3 ...... "
数组名=($列表名)
-
数组名[0]="value1"
数组名[1]="value2"
数组名[2]="value3"
数组的包括数据类型
-
数值型
-
字符型
-
混合型数值加字符
使用" "或' '定义单引号或双引号括起来
# 定义数组
array_name=(value1 value2 value3 ...)
# 访问数组元素
${array_name[index]}
# 获取数组中的所有元素
${array_name[@]}
# 获取数组的长度
${#array_name[@]}
# 获取数组中某个元素的长度
${#array_name[index]}
# 修改数组中的元素
array_name[index]=new_value
# 删除数组中的元素
unset array_name[index]
2. 基础用法
查看下标
数组取值
输出数组索引值对应的元素,索引值为从0开始
数组替换和追加
替换
追加
数组遍历
数组切片
${ARRAY[@]:offset:number}
offset #要跳过的元素个数
number #要取出的元素个数
#取偏移量之后的所有元素
查看所有数组
命令: declare -a
3. 冒泡排序
冒泡排序(Bubble Sort)是一种简单的排序算法,它通过比较相邻的元素并交换它们的位置来排序一个数组。冒泡排序重复地遍历数组,每次遍历都比较相邻的两个元素,如果它们的顺序不正确,则交换它们的位置。经过多次遍历,最大的元素会冒泡到数组的末尾,而较小的元素会逐渐移动到数组的前面。这个过程像冒泡一样,因此得名冒泡排序。
执行过程:
5个数字 5-1=4 需要比较4轮 才能知道每一个数字的具体位置
a=(70 40 30 60 50)
轮次 总个数 需要比较的数 比几次 找到的数
第1轮 5 5个数 比4次 找到最大数
第2轮 5 4个数 比3次 找到第二大数
第3轮 5 3个数 比2次 找到第三大的数
第4轮 5 2个数 比1次 找到第四大的数