今天上午一个朋友突然QQ问到,shell编程中的函数为什么return只能是整数,怎么样才能将函数的执行结果返回并保存至某个变量中。其实这个问题很好解决---只需要认真了解下shell函数即可。以下是根据聊天记录整理了关于函数的几个点:

shell编程中关于函数需要知道的几点

 一、无论是在函数内,还是在函数外,$0的值都是该脚本本身。

    [root@target ~]# cat test.sh    #!/bin/bash        echo $0        function testFunc(){        echo "In function:"        echo "\$0=$0"        echo "\$1=$1"    }        testFunc 'test test'    [root@target ~]# bash test.sh    test.sh    In function:    $0=test.sh    $1=test test

 二、函数内定义的变量(如果不是必须要修改全局变量的话)尽量使用local关键字定义成局部变量,以免覆盖全局变量值

    

[root@target ~]# cat local.sh     #!/bin/bash        TESTDATA="Hello world."    TESTDATA1="Hello shell."        function localFunc(){        TESTDATA="Hello python."        local TESTDATA1="Hello PHP."        echo "In function:"        echo "\$TESTDATA=$TESTDATA"        echo "\$TESTDATA1=$TESTDATA1"    }        #call function    localFunc        echo "Out of function:"    echo "\$TESTDATA=$TESTDATA"    echo "\$TESTDATA1=$TESTDATA1"    [root@target ~]# bash local.sh     In function:    $TESTDATA=Hello python.    $TESTDATA1=Hello PHP.    Out of function:    $TESTDATA=Hello python.    $TESTDATA1=Hello shell.

 三、函数内使用return 关键字返回一个0-255的值,表示该函数退出状态码(即该函数是否执行成功),0表示执行成功,非0表示失败。在日常工作中,可以根据条件使函数返回是否执行成功,供其他程序做判断使用。若需要函数返回一个结果值,并存储到一个变量中,要使用echo语句。

    [root@target ~]# cat return.sh     #!/bin/bash        function returnFunc(){        echo "value"        return 247    }        DATA=$(returnFunc)    echo "\$?=$?"    echo "\$DATA=$DATA"    [root@target ~]# bash return.sh     $?=247    $DATA=value

四、如果有多个shell脚本,一个脚本需要调用另外一个脚本里的函数,需要执行以下命令,将指定的脚本文件载入:

. ./func.sh

或者

source ./func.sh

上边的操作类似于其他语言的include操作。

   

 [root@target ~]# cat func.sh     #!/bin/bash        function func1(){        echo "This is func1"    }        function func2(){        echo "This is func2"    }        function func3(){        echo "This is func3"    }    [root@target ~]# cat call.sh     #!/bin/bash        #source ./func.sh    . ./func.sh        func1    func2    func3    [root@target ~]# bash call.sh    This is func1    This is func2    This is func3