优秀的编程知识分享平台

网站首页 > 技术文章 正文

每天三分钟搞定linux shell脚本25 shell函数的基本使用

nanyue 2025-03-01 14:53:34 技术文章 6 ℃


代码重用的时候,通过函数非常方便。在函数代码块中实现逻辑,在需要使用的时候调用该函数,建立脚本:

#/bin/bash
function echo1 {
    echo "This is function 1"
}

echo2() {
    echo "This is function 2"
}

echo1
echo2

运行后输出:

This is function 1
This is function 2
1
2

shell中的函数必须先定义后使用,否则就会报错。同时函数名也必须是唯一的,如果定义了两个相同名字的函数,后面的会覆盖前面的。

注意函数体的左花括号{和后面的命令之间必须有空格或换行,如果将最后一条命令和右花括号}写在同一行,命令末尾必须有;号。


之前我们在使用脚本的时候也给脚本传参过,向函数传递参数以及函数中处理参数的过程跟这个相同。比如用
$#表示参数的总个数,用$1表示第一个参数等等。

1 传递普通变量

向函数传递普通变量的时候只要在调用的时候把参数写在后面即可,举例如下:

#/bin/bash
function process_param {
    if [ $# -eq 0 ] || [ $# -gt 2 ];then
        echo "-1"
    elif [ $# -eq 1 ];then
        echo $[ $1 * 10 ]
    else
        echo $[ $1 + $2 ]
    fi
}

value=$(process_param)
echo "value of process_param is $value"

value=$(process_param 1)
echo "value of process_param 1 is $value"

value=$(process_param 1 2)
echo "value of process_param 1 2 is $value"

运行后结果为:

value of process_param is -1
value of process_param 1 is 10
value of process_param 1 2 is 3

2传递数组

向函数传递数组的时候,如果以变量名的形式传参,函数内部将只能拿到数组的第一个元素。举例如下

#/bin/bash
function show_array {
   echo "num is array is $@"
   array=$1
   echo "array is ${array[*]}"
}

array_source=(1 2 3)
echo "array_source is ${array_source[*]}"
show_array $array_source 

运行后结果为:

array_source is 1 2 3
num is array is 1
array is 1

如果想要传递整个数组的话,在函数调用处函数内部都要使用echo语句,举例如下:

#/bin/bash
function show_array {
    array=($(echo "$@"))
    for value in ${array[*]}
    do
        echo "value is $value"
    done
}

test_array=(1 2 3)
echo "array_source is ${test_array[*]}"
show_array $(echo ${test_array[*]}) 

运行后结果如下:

array_source is 1 2 3
value is 1
value is 2
value is 3

通过echo语句可以传递整个数组了。

最近发表
标签列表