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
沒有留言:
張貼留言