加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

Shell编程关于函数要谨慎的几点

发布时间:2021-12-10 19:24:23 所属栏目:教程 来源:互联网
导读:今天上午一个朋友突然QQ问到,shell编程中的函数为什么return只能是整数,怎么样才能将函数的执行结果返回并保存至某个变量中。其实这个问题很好解决---只需要认真了解下shell函数即可。以下是根据聊天记录整理了关于函数的几个点: shell编程中关于函数需要

今天上午一个朋友突然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

(编辑:PHP编程网 - 黄冈站长网)

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

    热点阅读