在Shell脚本中,函数是指将若干条命令组合为一个功能模块并命名的代码块,用来避免重复代码,增强可读性和可维护性。Linux Shell支持定义函数,可以通过函数名调用执行,本质上就是一个子程序。
函数定义的一般格式如下:
function_name () {
command1
command2
...
commandN
return value
}
其中 function_name 是自定义函数名,用来调用执行函数;command1 到 commandN 是实际的函数执行命令;return value 是可选项,用于返回函数执行结果。
函数可以带有参数,类似于脚本的传参方式。函数内部可以使用特殊变量 $1、$2、$3 等来获取传入的参数值。如果参数数量不定,则可以使用 $* 或 $@ 来获取所有参数,例如:
function_name () {
echo "Hello $1, your age is $2."
}
function_name "Tom" 30
执行结果为:
Hello Tom, your age is 30.
此外,函数中也可以定义局部变量,使用 local 关键字来声明,例如:
function_name () {
local var_name=value
}
这样定义的变量只能在函数内部使用,不会对函数外部的变量造成影响。
函数可以像命令一样使用管道、输入输出重定向、参数传递等特性,使得函数更加灵活、易用。
例如,下面是一个用来计算一个整数数组的平均值的函数示例:
calc_avg() {
local array=("$@")
local sum=0
local len=${#array[@]}
for i in "${array[@]}"; do
sum=$(($sum + $i))
done
echo $(($sum / $len))
}
my_array=(10 20 30 40 50)
avg=$(calc_avg "${my_array[@]}")
echo "The average of the array is: $avg"
该函数首先获取整数数组,然后遍历数组累加所有元素,最后计算平均值并返回。在脚本中调用该函数并将整数数组传入,可以得到计算结果并输出到控制台。