shell脚本中的函数
一、函数的介绍
在编写脚本时,有些脚本可以反复使用,可以调用函数来解决。
语句块定义成函数约等于别名。
1.函数的作用
-
使用函数可以避免代码重复;
-
使用函数可以将一个大的工程分割为若干小的功能模块,代码的可读性更强。
2.函数的使用方法
-
定义函数
-
再引用函数
3.函数的定义
第一种格式:
function 函数名 {
命令序列;
}
第二种格式:
函数名() {
命令序列
}
第三种格式:
unction func_name () {
命令序列
}
注意
- 直接写函数中调用函数,直接写函数名
- 同名函数,后一个生效
- 调用函数一定要先定义
- 只要先定义了调用的函数,与其他函数定义顺序无关
- 函数是将脚本定义成一个命令,调用命令时记得使用
命令,调用结果。
4.查看与删除函数
查看函数的列表:declare -F
查看函数的具体命令:declare -f
删除函数:unset 函数名
二、函数值返回值 return 、echo
获得函数返回值的两种方式:
- return表示退出函数并返1. 回一个退出值,脚本中可以用$?变量显示该值。
- 在函数体中用 echo 输出返回值。并在函数体外使用变量赋值后,可再进一步对函数的返回值进行加工操作。
使用原则:
- 函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码;
- 退出码必须是0-255,超出的值将为除以256取余。
问题:怎么解决超过255?
答:因为return的返回值的范围是0-255,超过部分除以256取余,得不到我们想要的结果,此时可以直接在函数体中使用echo命令。
三、函数的传参
示例1:
示例2:
示例3:
四、函数的变量范围
-
函数在shell脚本中仅在当前的shell环境中有效;
-
shell脚本中函数的变量默认全局有效;
-
将变量限定在函数内部使用local命令。
shell脚本中的数组
一、数组的介绍
-
数组就是把n个变量或者字符内容集合起来用一个名字命名,接着用编号对它们区分的元素集合,这个名字叫数组名;
-
区分不同内容的是编号,叫数组下标;
-
有了数组,就能用一样的名字引用不同的变量或者变量值,并通过数字来识别它们;
-
使用数组也能使代码缩短简洁等好处。
-
使用数组也能使代码缩短简洁等好处
例如:
将班级里的各位同学的姓名存入到变量中,需要每一个学生对应一个变量,100个学生需要 100个变量,不好维护 name1=张三 name2=李四 ...... 我们可以只用一个变量 将所有学生的都存入student变量中, 将来会取用某一个的学生时,需要用到编号,专业的称呼,下标。数组里的东西都是有相同属性的元素 数组只有一个名字,减少了变量的个数。
-
变量:存储单个元素的内存空间;
-
数组:存储多个元素的连续的内存空间,相当于多个变量的集合。
二、数组的定义
1.数组的类型
-
普通数组可以不事先声明,直接使用 declare -a ARRAY_NAME
-
关联数组必须先声明,再使用 declare -A ARRAY_NAME
2.数组的定义方法
数组名=(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..."
数组名=($列表名)
b="1 2 3 4 5 6" a=($b)
数组名[0]="value"
数组名[1]="value"
数组名[2]="value"
a[0]=10
a[1]=20
a[3]=30
三、关联索引
1.下标可以是文字:称为关联索引值对的关系是一个公司的的属性。
公司名对应的下标为 name
总经理对应的下标为 ceo
所在地对应的下标为 南京
注册资金对应的下标为 money
2.下标可以不连续,称为稀疏格式 定义关联数组,一定要先申明。
四、数组相关命令
1.数组包括的数据类型
●数值类型
●字符类型:
使用" "或' '定义
获取数组长度:
a=(1 2 3 4 5)
echo ${#a[*]} //显示下标总个数
echo ${#a[@]} //显示下标总个数