创建函数
通过创建shell脚本函数,使得我们可以在其他shell脚本应用程序中使用这些函数。
函数是被赋予名称的脚本代码块,可以在代码的任意位置重用,只需要引用该代码被赋予的函数名称(也就是调用函数)。
在进入正题之前,我们来回顾一下关于一些变量的含义:
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
①基本函数
function name{
commands
}
name(){
commands
}
②返回值
$?可以获取函数的返回值。
需要注意两点:其一是它返回最近已执行命令的退出状态。其二是退出状态的取值是0~255(可使用return定义返回值,如果不适用, $? 获取的返回值只有0和1)
函数的输出也可以捕获并存放到shell变量中:result='name'
③函数中变量
函数无法从脚本命令行直接访问脚本参数值,必须在调用该函数时手动传递这些数据。
function fun {
echo $[ $1 *$2 ]
}
value='fun $1 $2'
函数中定义的变量默认为全局变量,要特意声明变量为局部变量的时候,在变量名前面加local,如下:
function fun{
local temp=$ [ $1 + $2 ]
}
④数组变量与函数
向函数中传递数组元素,不能将其当做单个参数传递,要将数组变量拆分为单个元素,然后使用这些元素的值作为函数的参数,函数内部可以将这些参数重新组合成数组变量。
function test{
local newarray
newarray=('echo "$@"')
echo "${newarray[*]}"
}
myarray=(1 2 3 4 5)
a='echo ${myarray[*]}'
result=('test $a') #如果函数返回的是数值,就直接用result='test $a'
echo "$result"
⑤创建库
假定创建的库文件myfuncs与shell脚本在同一目录,在shell脚本的开头添加:
../myfuncs
如果二者不在同一个目录,那么应该使用路径来访问库文件。
⑥在命令行中使用函数
我们可以在命令行直接输入自己定义的函数,然后直接使用(使用一行命令定义是注意在命令结束前,(即”}”前必须写上“;”)。使用多命令行定义时,只需要在“{”后按回车就可以了),但是在重启shell后自定义的函数不会生效。
我们可以在主目录下的.bashrc文件中定义函数(可以直接定义,课可以采用上面提到过得包含库的路径方式包含已经写过的库文件),这样就可以保证在重启shell后,自定义的函数依然生效。