歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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

Copyright © Linux教程網 All Rights Reserved