函数
函数的数学表达式
sin cos tan 其实就是定义好了计算公式 函数就是一个功能模块,在函数中写好执行的命令即可
使用函数可以避免代码重复,增加可读性, 简化脚本
使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强
函数使用方法:
1. 定义函数
2. 再引用函数
基本格式
1.
function 函数名{
命令序列
}
2.
函数名(){
命令序列
}
3.
function func_name () {
...函数体...
}
注意事项
1. 直接写 函数中调用函数 直接写函数名
2. 同名函数 后一个生效
3. 调用函数一定要先定义
4. 每个函数是独立
关于declare查询的用法
【查看函数列表】
declare -F
#查看当前已定义的函数名,仅仅显示名称
declare -f
#查看当前已定义的函数定义,包含脚本代码
declare -f 函数名称
#查看该函数是否存在(这里必须是已经用source或者.已经声明过的函数内容,要不然系统无法识别)
declare -F 函数名称
#查看当前已定义的函数,以及详细代码
unset 函数名
#表明从系统中删除定义的函数,但是如果函数脚本使用source再次声明,还是会存在的
判断操作系统版本:
函数的返回值return
return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
使用原则:
- 1.函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
- 2.退出码必须是0-255,超出的值将为除以256取余
怎么解决超过255
因为return的返回值的范围是0-255,超过部分除以256取余,得不到我们想要的结果,此时可以直接在函数体中使用echo命令。
函数的传参数
函数变量的作用范围:
函数在shell脚本中仅在当前的shell环境中有效
shell脚本中函数的变量默认全局有效
将变量限定在函数内部使用local命令
函数递归
函数调用自己本身的函数
必须要有结束函数的语句,防止死循环
示例:计算5的阶乘
for循环编写:
函数编写:
数组
数组的分类
普通数组
下标索引是从0开始的数字,下标数字是可以不连续的
普通数组是系统会自动进行声明的
bash a.sh不会变成当前系统的数组
source a.sh这是可以变为当前bash环境的数组,自动声明
关联数组
数组名和索引:
- 索引的编号从0开始,属于数值索引
- 索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash 4.0版本之后开始支持
- bash的数组支持稀疏格式(索引不连续)
声明数组
#普通数组可以不事先声明,直接使用
declare -a ARRAY_NAME
#关联数组必须先声明,再使用
declare -A ARRAY_NAME
数组定义方法
方法一(一次赋值全部元素):
数组名=(value0 value1 value2 ...)
a=(10 20 30 40 50)
方法二(只赋值特定元素):
数组名=([0]=value [1]=value [2]=value ...)
b=([0]=10 [1]=20 [2]=30)
方法三:
列表名="value0 value1 value2 ..."
数组名=($列表名)
方法四(一次只赋值一个元素):
数组名[0]="value"
数组名[1]="value"
数组名[2]="value"
定义数组
方法有5种,常用的是这两种
1.总体赋值
2.单个赋值
调用数组以及给数组赋值
获取数组长度
获取数组的所有信息
数组切片
echo ${数组名[@]:n:m}表示跳过前n个,只看m个,如果没有m则是后面所有
给某个数组原有的值重新赋值
数组名[标号]=新的值
取出数组中的最大值和最小值
删除数组
unset 数组名称
总结:
函数总结:
1、先定义函数
2、调用函数(注意:若定义完成不调用则函数无效),在命令行调用需要使用source和.来执行函数脚本申明
3、查看系统的所有函数名称:declare -F (如果函数脚本没有用source,那么在系统中查不到)
4、查看函数定义详细内容:declare -f 函数名称
5、删除函数格式:unset 函数名称
6、函数中的变量注意,根据使用可以加上local为局部变量,只在执行函数时生效
数组总结:
1、关联数组需要先声明,即使在脚本中也需要使用(declare -A 数组名)来进行声明,否则无效
2、查询系统中的所有普通数组为declare -a ;查询所有关联数组为:declare -A
3、查询数组内容:echo ${数组名[*]}、${数组名[@]}
4、删除数组格式:unset 数组名;删除单个数组内容:unset 数组名[下标]