函數(shù)允許你將一個腳本的整體功能分解成更小的邏輯子部分,然后當(dāng)需要的時候可以被調(diào)用來執(zhí)行它們各自的任務(wù)。
使用函數(shù)來執(zhí)行重復(fù)性的任務(wù)是一個創(chuàng)建代碼重用的很好的方式來。代碼重用是現(xiàn)代面向?qū)ο缶幊痰脑瓌t的重要組成部分。
Shell 函數(shù)類似于其他編程語言中的子程序和函數(shù)。
聲明一個函數(shù),只需使用以下語法:
function_name () {
list of commands
}
函數(shù)的名字是 function_name,在腳本的其它地方你可以用函數(shù)名調(diào)用它。函數(shù)名后必須加括號,在其后加花括號,其中包含了一系列的命令。
以下是使用函數(shù)的簡單例子:
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World"
}
# Invoke your function
Hello
當(dāng)你想執(zhí)行上面的腳本時,它會產(chǎn)生以下結(jié)果:
$./test.sh
Hello World
$
你可以定義一個函數(shù),在調(diào)用這些函數(shù)的時候可以接受傳遞的參數(shù)。這些參數(shù)可以由 $1,$2 等表示。
以下是一個例子,我們傳遞兩個參數(shù) Zara 和 Ali ,然后我們在函數(shù)中捕獲和編譯這些參數(shù)。
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World $1 $2"
}
# Invoke your function
Hello Zara Ali
這將產(chǎn)生以下結(jié)果:
$./test.sh
Hello World Zara Ali
$
如果你從一個函數(shù)內(nèi)部執(zhí)行一個 exit 命令,不僅能終止函數(shù)的執(zhí)行,而且能夠終止調(diào)用該函數(shù)的 Shell 程序。
如果你只是想終止該函數(shù)的執(zhí)行,有一種方式可以跳出定義的函數(shù)。
根據(jù)實際情況,你可以使用 return 命令從你的函數(shù)返回任何值,其語法如下:
return code
這里的 code 可以是你選擇的任何東西,但很明顯,考慮到將腳本作為一個整體,你應(yīng)該選擇有意義的或有用的東西。
下面的函數(shù)返回一個值 1:
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World $1 $2"
return 10
}
# Invoke your function
Hello Zara Ali
# Capture value returnd by last command
ret=$?
echo "Return value is $ret"
這將產(chǎn)生以下結(jié)果:
$./test.sh
Hello World Zara Ali
Return value is 10
$
函數(shù)更有趣的功能之一就是他們可以調(diào)用本身以及調(diào)用其他函數(shù)。調(diào)用自身的函數(shù)被稱為遞歸函數(shù)。
下面簡單的例子演示了兩個函數(shù)的嵌套:
#!/bin/sh
# Calling one function from another
number_one () {
echo "This is the first function speaking..."
number_two
}
number_two () {
echo "This is now the second function speaking..."
}
# Calling function one.
number_one
這將產(chǎn)生以下結(jié)果:
This is the first function speaking...
This is now the second function speaking...
你可以把常用函數(shù)的定義放置到文件 .profile 中,這樣當(dāng)你載入的時候可以得到它們并且在 prompt 命令中使用它們。
或者,你可以將多個函數(shù)定義在一個文件中,比如 test.sh,然后通過鍵入以下內(nèi)容當(dāng)前 Shell 中執(zhí)行該文件:
$. test.sh
這樣做可以使 test.sh 內(nèi)定義的任何函數(shù)被讀入,定義到當(dāng)前 Shell ,如下:
$ number_one
This is the first function speaking...
This is now the second function speaking...
$
要從 Shell 刪除函數(shù)的定義,你可以使用帶 .f
選項的 unset 命令。這也是用來刪除 Shell 中一個變量的定義的命令。
$unset .f function_name
更多建議: