加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

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

发布时间:2022-11-25 23:00:21 所属栏目:Unix 来源:互联网
导读:
代码重用的时候,通过函数非常方便。在函数代码块中实现逻辑,在需要使用的时候调用该函数,建立脚本:
#/bin/bash
function echo1 {
echo "This is function 1"
}
echo2() {
ech

unix shell编程_unix shell编程 pdf_UNIX Shell函数

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

#/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中的函数必须先定义后使用,否则就会报错。同时函数名也必须是唯一的,如果定义了两个相同名字的函数,后面的会覆盖前面的。

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

UNIX Shell函数_unix shell编程_unix shell编程 pdf

之前我们在使用脚本的时候也给脚本传参过,向函数传递参数以及函数中处理参数的过程跟这个相同。比如用$#表示参数的总个数,用$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传递数组

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

#/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语句可以传递整个数组了。

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!