Linux Shell函数

在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"

该函数首先获取整数数组,然后遍历数组累加所有元素,最后计算平均值并返回。在脚本中调用该函数并将整数数组传入,可以得到计算结果并输出到控制台。