目录
1. 函数
1.1 函数的格式及调用
1.2 函数的返回值
1.3 函数的参数
1.4 函数的变量作用范围
1.5 函数的递归
2. 数组
2.1 数组的定义
2.2 数组的使用
2.3 有关数组的操作
2.3.1 数组切片
2.3.2 数组遍历
2.3.3 数组删除
2.3.4 数组追加
2.3.5 数组替换
Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可。
1.标准版
function name () { //函数名
commands //函数内容
[return] //返回值
}
2.简化版
name(){ //函数名
commands //函数内容
[return] //返回值
}
我们一般使用下面的方法,进行函数的定义。当我们需要调用函数时,我们可以根据函数的内容来选择带参数和不带参数。
name
name 参数1 参数2
例
打印hello
函数的返回值,即函数功能完成之后传回主函数的值。
retrun
但是return只能返回0-255之内的数字,如果返回值超过了这个范围,最后显示的结果则是数值除以256取余。
和c,java,c++等大部分编程语言不同,Shell 中的函数在定义时不能指明参数,但是在调用时却可以传递参数。
函数的参数时shell位置变量的一种,在函数中使用“$n”的方式来接收,从$1开始,依次递增n的值。
当然,函数中也可以使用预定义变量
例
要注意的是,函数的参数和主体中的参数只有位置上的对应关系,没有名称的对应关系。
一般来说,在shell脚本中定义的变量,他的作用范围仅限于shell脚本内,退出当前的bash环境,该变量就会失效。同样的,为了区分函数和主体部分的变量,我们可以将变量的作用范围限制在函数中即:
local 变量名
函数的递归,即函数调用自身来完成某些功能,如阶乘的计算,或目录有关的操作
我们以阶乘的计算为例
#!/bin/bash
fun () {
#判断输入的值是否是0或1,如果是直接输出1,不是进行递归
if [ $1 -eq 0 -o $1 -eq 1 ]
then
echo 1
else
#递归操作
echo $[$1* $(fact $[$1-1])]
fi
}
fun $1
和其他编程语言一样,Shell 也支持数组。数组(Array)是若干数据的集合,其中的每一份数据都称为元素。
Shell 并且没有限制数组的大小,理论上可以存放无限量的数据。和大部分语言类似,Shell 数组元素的下标也是从 0 开始计数。
获取数组中的元素要使用下标[ ]
,下标可以是一个整数,也可以是一个结果为整数的表达式;当然,下标必须大于等于 0。
shell中,数组用()来表示,数组内的元素用空格来分割
定义的格式
法1
array=(e1 e2 e3 .... en)
法 2
array=([0]=value0 [1]=value0 [2]=value0 ...)
使用这种方法给单独的下标赋值
如
array=([1]=1 [5]=5 [9]=9 ...)
法 3
arry[0]=1
arry[5]=5
和法2类似,单独为数组某一下标赋值
当我们想要使用数组时,可以直接使用数组名进行输出
或
也可以单独显示数组的某一个元素
数组的切片就是提取出数组中的一部分元素
格式
${数组名:切片开始下标:切片连续个数}
如
在脚本中,如需要对数组中的每个元素进行单独的处理,我们可以使用循环结构来进行
如
删除不用的数组
unset 数组名
也可以删除单独的元素
unset 数组名[下标]
当我们原本定义的数组不能满足我们的需求时,我们需要追加数组
法1
直接在数组最后追加
arr[原数组最后下标+1]=追加值
法2
数组名[${#数组名[@]}]=追加值
法3
数组名+=(元素1 元素2 ...)
替换数组中某一个元素,但是不会真正改变数组的值
${数组名[@]/旧字符/新字符}