2018年1月9日 星期二

Bash Shell | 如何宣告函式 Function

Bash 宣告函式(Function)可以用底下兩種格式

name () { }

or

function name [()] { }

範例:

#!/bin/sh

showFunc () 
{
        echo \$FUNCNAME = $FUNCNAME
}

function showParams
{
        echo \$# = $#
}

function showWhoami ()
{
        echo whoami =  $(whoami)
}

showFunc
showParams apple banana
showWhoami

結果:

$FUNCNAME = showFunc
$# = 2
whoami = william

1. 將函式(Function)寫成一行的方式
如果要將函式(Function)寫成一行,必須要注意,第一個 ( { ) 與其後一行指令至少要隔一個空白或是換行(newline),且指令後要加上分號( ; )或( & )或換行(newline),否則會有錯誤。

範例:

#!/bin/sh

showFunc () {echo \$FUNCNAME = $FUNCNAME}

結果:

./func.sh: line 3: syntax error near unexpected token `{echo'
./func.sh: line 3: `showFunc () {echo \$FUNCNAME = $FUNCNAME}'

2. 函式的參數
函式的參數是位置參數(Positional Parameters),可以透過 $1 $2 來取得,不同的是 $0 不是函式名,還是保持為 script 的名字,函數名可以透過變數 FUNCNAME 取得。

範例:

#!/bin/sh


function showParams
{
        echo \$# = $#
        echo \$0 = $0
        echo \$1 = $1
        echo \$2 = $2
        echo \$FUNCNAME = $FUNCNAME
}

結果:


$# = 2
$0 = ./func.sh
$1 = apple
$2 = banana
$FUNCNAME = showParams

3. 函式的離開狀態(Exit Status)(回傳值)
函式(Function)的離開狀態(Exit Status)(回傳值)是函式內最後一個被執行之指令的離開狀態(Exit Status)。另一個決定函式離開狀態(回傳值)的方式是使用內建指令 return,當 return 在函式內被執行後,函式會直接結束,函式的離開狀態(回傳值)會是 return 後的參數。

範例:


#!/bin/sh

showFunc () 
{
        echo \$FUNCNAME = $FUNCNAME
        declare -p FUNCNAME
}

function showParams
{
        echo \$# = $#
        delcare -p var0
}

function showWhoami ()
{
        echo whoami =  $(whoami)
        return 100
        echo "The command after return"
}

showFunc
echo \$? = $?
echo ""
showParams apple banana
echo \$? = $?
echo ""
showWhoami
echo \$? = $?

結果:

$FUNCNAME = showFunc
declare -a FUNCNAME='([0]="showFunc" [1]="main")'
$? = 0

$# = 2
./func.sh: line 12: delcare: command not found
$? = 127

whoami = william
$? = 100

沒有留言:

張貼留言