在shell中我们可以将频繁使用的代码整合到一块,形成函数,方便调用,一般shell中方法定义如下:
function function_name {
commands
}
函数调用如下:
function_name 函数参数列表
函数返回值
默认情况下,函数会把最后一条命令的状态码当做函数的状态码返回,可以用标准的$?
来获取函数的执行的状态码
使用return返回指定的状态码
在函数中,可以通过return返回指定的状态码:
function test001 {
echo "hello world"
return 0
}
需要注意的是,返回的状态码只能是 0-255
使用函数输出
我们可以像正常命令一样,用变量接收函数的输出:
function hello_world {
echo "hello world"
}
str=$(hello_world)
echo ${str}
函数的参数
函数普通参数没有什么特别说明,需要注意的是,如果像函数传递数组参数需要将整个数组变量值传递进去,如下:
function arr {
local temparr
temparr=($(echo $@))
echo ${temparr[*]}
}
testarr=(1 2 3 4)
arr ${testarr[*]}
创建库函数
有时候,一个函数可能在各个脚本中被频繁使用,这样如果在每个脚本中都建立一个同样的方法会显得很笨重和冗余,这时候可以将公用的通用函数编程库函数来使用。
使用source
命令,可以将函数导入到当前脚本中:
#func_lib.sh
#!/bin/sh
THIS_PATH=$(cd $(dirname $0);pwd)
echo ${THIS_PATH}
function func {
echo "hello world"
local dir=$(cd $(dirname $0);pwd)
echo " pp is $pp"
echo $dir
}
#test.sh
#!/bin/sh
THIS_PATH=$(cd $(dirname $0);pwd)
source ${THIS_PATH}/lib/func_lib.sh
export pp="lib func"
func
这样就可以在其他脚本中调用同一个函数。
另外,可以bashrc将上述source加入进去,这样全局有效。