函数定义、函数参数、跨脚本调用函数

来源:互联网 发布:makerbot中文软件下载 编辑:程序博客网 时间:2024/05/31 19:35

2.6.函数使用

函数定义

示例(文件名称为func1.sh):

#!/bin/bash

 

##定义函数

hello() {

    echo "Hello there today's date is `date +%Y-%m-%d`"

    return 2     ##返回值其实是状态码,只能在[0-255]范围内

}

hello

echo $?     ##获取函数的return值,通过$?来获取

echo "now going to the function hello"

echo "back from the function"

运行结果如下:

[root@hadoop test]# sh func1.sh

Hello there today's date is 2017-01-02

2

now going to the function hello

back from the function

函数调用:

function hello() 

或 function hello

或 hello

 

注意:

1.必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译

2.函数返回值,只能通过$? 系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

 

 

脚本调试:

sh -vx helloWorld.sh

或者在脚本中增加set -x

 

函数参数

定义文件名param.sh

#!/bin/bash

funWithParam() {

    echo "第一个参数为 $1 !"

    echo "第二个参数为 $2 !"

    echo "第十个参数为 $10 !"

    echo "第十个参数为 ${10} !"

    echo "第十一个参数为 ${11} !"

    echo "参数总数有 $# 个!"

    echo "作为一个字符串输出所有参数 $* !"

}

funWithParam 1 2 3 4 5 6 7 8 9 34 73

运行结果:

[root@hadoop test]# sh param.sh

第一个参数为 1 !

第二个参数为 2 !

第十个参数为 10 !

第十个参数为 34 !

第十一个参数为 73 !

参数总数有 11 个!

作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

 

创建文件param2.sh

#!/bin/bash

funWithReturn(){

    echo "这个函数会对输入的两个数字进行相加运算..."

    echo "输入第一个数字: "

    read aNum

    echo "输入第二个数字: "

    read anotherNum

    echo "两个数字分别为 $aNum 和 $anotherNum !"

    return $(($aNum+$anotherNum))

}

funWithReturn

echo "输入的两个数字之和为 $? !"

运行如下:

[root@hadoop test]# sh param2.sh

这个函数会对输入的两个数字进行相加运算...

输入第一个数字:

23

输入第二个数字:

45

两个数字分别为 23 和 45 !

输入的两个数字之和为 68 !

 

跨脚本调用函数

假如上诉脚本文件param.sh保存在路径: /home/test/test/param.sh

则可在脚本fun_other.sh中调用脚本param.sh中的函数

#!/bin/bash

. /home/test/test/param.sh     ##注意: .  和   /  之间有空格

#或者source /home/test/test/param.sh

funWithParam 11 22 33 44 55 66 77 88 99 100 101

执行命令之后的效果如下:

 

[root@hadoop test]# sh fun_other.sh

第一个参数为 1 !

第二个参数为 2 !

第十个参数为 10 !

第十个参数为 34 !

第十一个参数为 73 !

参数总数有 11 个!

作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

第一个参数为 11 !

第二个参数为 22 !

第十个参数为 110 !

第十个参数为 100 !

第十一个参数为 101 !

参数总数有 11 个!

作为一个字符串输出所有参数 11 22 33 44 55 66 77 88 99 100 101 !

 

0 0