1.、
在编写脚本时,有些脚本需要反复使用,可以调用函数
来解决
语句块定义成函数约等于定义了一个别名
函数是脚本的别名
将命令序列按照格式写在一块
可方便重复使用命令序列
定义函数的方法:
(一)
function 函数名 {
命令序列
}
(二)
函数名(){
命令序列
}
(三)
function 函数名(){
命令序列
}
2. 函数注意事项
直接写函数中调用函数,直接写函数名
同名函数,后一个生效
调用函数一定要先定义
每个函数是独立
调用函数
function_name param1 param2 …
在上面的语法中,function_name 表示函数名称,其后面跟的 param1 、 param2… 表示函数 的参数
调用函数 : 直接执行函数名即可
函数名
带参数的函数的执行方法:
函数名 参数
写一个基本的函数文件
3.查看函数
使用declare命令
-F:查看函数名
-f:函数具体信息
也可以指定查看一个函数的具体信息
4.删除函数
unset 函数名
5.锁定变量
函数变量的作用范围:
函数在shell脚本中仅在当前的shell环境中有效
shell脚本中函数的变量默认全局有效
将变量限定在函数内部使用local命令
6.函数返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
使用原则:
1.函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
2.退出码必须是0-255,超出的值将为除以256取余
return 0 无错误返回
return 1-255 有错误返回
可以看到,脚本正常执行后,返回退出状态码为0,但是,脚本中有错误的命令,执行脚本后,状态码依然为0
所以,我们可以自定义一个返回值
return的具体用法
第一种是无返回值函数:即使函数不返回任何值(即 void 函数),也可以使用return语句来提早结束函数执行,不过在这种情况下通常可以省略return语句,因为函数会自动在执行完最后一行代码后返回
第二种是多路径返回
根据不同的逻辑分支,函数可能通过多个位置上的 return 语句返回不同的结果。
在函数中检测到一些不能执行的命令后直接退出,并返回指定的状态码,有助于去排查错误
也可以设置变量值为返回值,将该段脚本执行后所得到的结果,设为返回值,通过返回值,来判断该段脚本对自己的作用,选取段落进行详细查看,不需要将脚本从头到尾执行一遍
7.函数传参
指在调用自定义函数时向该函数传递参数的过程。这些参数可以
在函数内部作为变量使用,以便函数能够根据传入的数据执行不同的任务或操作
在这个例子中:
函数 add_numbers 接受两个参数 $1 和 $2。
参数通过位置来引用,即 $1 是第一个参数,$2 是第二个参数。
在函数体内部,通过 $1 和 $2 访问传递进来的参数值,并进行加法运算。
结果被存储在局部变量 result 中,并通过 echo 输出。
当调用 add_numbers 3 5 时,函数接收到参数 3 和 5,计算它们的和并将结果返回给调用者。
8.函数递归
调用自己本身
示例:求任意数字的阶乘
9.数组
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组)
数组元素的下标由 0 开始。
Shell 数组用括号来表示,元素用"空格"符号分割开
在shell语句中,使用、遍历数组的时候,数组格式要写成 ${arr[@]} 或 ${arr[*]}
定义数组的方法
示例1:
格式:
数组名=(value1 value2 value3 ..... )
示例2:
数组名=([0]=value1 [1]=value2......)
示例3:
数组名[0]="value1"
数组名[1]="value2"
数组名[2]="value3"
数组遍历
数组切片
格式:${数组名[@/*]:其实位置:长度}
数组替换
格式:${数组名[@/*]:/查找字符/替换字符}
数组删除和指定下标的值删除
数据追加元素
使用下标追加
格式1:数组名[下标]=变量
格式2:数组名+=(变量1 变量2)
查看所有数组