函數(shù)允許您對(duì)分解成更小的,邏輯子部分,然后可以被要求執(zhí)行各項(xiàng)任務(wù)時(shí),它需要一個(gè)腳本的整體功能。
使用函數(shù)來(lái)執(zhí)行重復(fù)性的任務(wù),是一個(gè)很好的方式來(lái)創(chuàng)建代碼的重用。代碼重用是現(xiàn)代面向?qū)ο缶幊痰脑瓌t的重要組成部分。
Shell函數(shù)是類似于其他編程語(yǔ)言中的子程序,過程和函數(shù)。
聲明一個(gè)函數(shù),只需使用以下語(yǔ)法:
function_name () {
list of commands
}
函數(shù)名 function_name,這就是你將使用它從其他地方在你的腳本調(diào)用。函數(shù)名必須遵循括號(hào)內(nèi),后括號(hào)內(nèi)的命令的列表。
以下是使用函數(shù)簡(jiǎn)單的例子:
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World"
}
# Invoke your function
Hello
當(dāng)你想執(zhí)行上面的腳本,它會(huì)產(chǎn)生以下結(jié)果:
$./test.sh
Hello World
$
你可以定義一個(gè)函數(shù),它接受參數(shù),而調(diào)用這些函數(shù)。將這些參數(shù)代表$1,$2,依此類推。
以下是一個(gè)例子,我們傳遞兩個(gè)參數(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
$
如果你執(zhí)行一個(gè)exit命令從一個(gè)函數(shù)內(nèi)部,其效果不僅是終止執(zhí)行的功能,而且Shell 程序中調(diào)用該函數(shù)。
如果你不是想,只是終止執(zhí)行該函數(shù),再有就是退出來(lái)的一個(gè)定義的函數(shù)。
根據(jù)實(shí)際情況,你可以從你的函數(shù)返回任何值,使用返回的命令,其語(yǔ)法如下:
return code
這里的代碼可以是任何你選擇這里,但很明顯,你應(yīng)該選擇你的腳本作為一個(gè)整體的背景下是有意義的或有用的東西。
下面的函數(shù)返回一個(gè)值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ù)。被稱為遞歸函數(shù)調(diào)用自身的函數(shù)。
經(jīng)過簡(jiǎn)單的例子演示了一個(gè)嵌套的兩個(gè)函數(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...
你可以把常用功能 .profile 的定義,這樣他們就會(huì)每當(dāng)?shù)卿?,在命令提示符下,您可以使用它們?/p>
或者,你可以在一個(gè)文件中的定義分組為 test.sh,然后通過鍵入當(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...
$
要?jiǎng)h除從 shell 函數(shù)的定義,可以使用unset命令 .f 選項(xiàng)。這是相同的命令來(lái)刪除一個(gè)變量的定義Shell。
$unset .f function_name
更多建議: