Shell 函式


函式允許您對分解成更小的,邏輯子部分,然後可以被要求執行各項任務時,它需要一個指令碼的整體功能。

使用函式來執行重複性的任務,是一個很好的方式來建立程式碼的重用。程式碼重用是現代物件導向程式設計的原則的重要組成部分。

Shell函式是類似於其他程式設計語言中的子程式,過程和函式。

建立函式:

宣告一個函式,只需使用以下語法:

function_name () { 
   list of commands
}

函式名 function_name,這就是你將使用它從其他地方在你的指令碼呼叫。函式名必須遵循括號內,後括號內的命令的列表。

例如:

以下是使用函式簡單的例子:

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World"
}

# Invoke your function
Hello

當你想執行上面的指令碼,它會產生以下結果:

$./test.sh
Hello World
$

引數傳遞給函式:

你可以定義一個函式,它接受引數,而呼叫這些函式。將這些引數代表$1,$2,依此類推。

以下是一個例子,我們傳遞兩個引數Zara和Ali ,然後我們捕獲和列印這些引數函式。

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
}

# Invoke your function
Hello Zara Ali

這將產生以下結果:

$./test.sh
Hello World Zara Ali
$

從函式的返回值:

如果你執行一個exit命令從一個函式內部,其效果不僅是終止執行的功能,而且Shell 程式中呼叫該函式。

如果你不是想,只是終止執行該函式,再有就是退出來的一個定義的函式。

根據實際情況,你可以從你的函式返回任何值,使用返回的命令,其語法如下:

return code

這裡的程式碼可以是任何你選擇這裡,但很明顯,你應該選擇你的指令碼作為一個整體的背景下是有意義的或有用的東西。

例子:

下面的函式返回一個值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"

這將產生以下結果:

$./test.sh
Hello World Zara Ali
Return value is 10
$

巢狀函式:

函式更有趣的功能之一是,他們可以呼叫本身以及呼叫其他函式。被稱為遞回函式呼叫自身的函式。

經過簡單的例子演示了一個巢狀的兩個函式:

#!/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

這將產生以下結果:

This is the first function speaking...
This is now the second function speaking...

從提示的函式呼叫:

你可以把常用功能 .profile 的定義,這樣他們就會每當登入,在命令提示字元下,您可以使用它們。

或者,你可以在一個檔案中的定義分組為 test.sh,然後通過鍵入當前shell中執行該檔案:

$. test.sh

這樣做的效果造成任何test.sh內定義的函式,可以閱讀在如下定義為當前shell:

$ number_one
This is the first function speaking...
This is now the second function speaking...
$

要刪除從 shell 函式的定義,可以使用unset命令 .f 選項。這是相同的命令來刪除一個變數的定義Shell。

$unset .f function_name