Bash程式設計007——函式(一)

weixin_33860553發表於2018-12-29

Bash程式設計007——函式(一)

使用函式可以對程式進行更好滴組織,將一些相對獨立的程式碼變成函式,可以提高程式的可讀性和重用性,避免重複編寫大量相同的程式碼。

7.1 函式

7.1.1 函式定義

簡單來說,函式就是將一組功能相對獨立的程式碼集中起來,形成一個程式碼塊,這個程式碼塊可以完成某個具體地任務。本質上來說,函式是一個函式名到某個程式碼塊的對映。當定義了函式之後,就可以通過函式名來呼叫其所對應的程式碼塊。

對於shell函式而言,函式與shell指令碼並沒有明顯的區別,shell指令碼中可以使用的命令和語句,都可以在函式中使用。但是,在執行時,函式和指令碼還是有著本質上的區別。shell指令碼在執行時,會建立一個新的shell程式來解釋執行指令碼中的程式碼,指令碼執行完成,shell程式就會結束;而函式在執行時,系統並不會為其單獨建立一個程式,而是在呼叫者的程式中直接解釋執行函式中的程式碼。

7.1.2 基本語法

函式基本語法:

function name (){
    commands;
}
// 或者可以省略function
name () {
    commands;
}

函式名的命名規則和變數的命名規則相同,由數字、字母或下劃線組成且以字母或下劃線開頭的字串。

示例:

function Hello(){
    echo "Hello world"
}
# 執行
Hello
# 結果:Hello world

7.1.3 傳遞引數

當某個函式定義之後,使用者就可以通過函式名來呼叫該函式。呼叫函式的基本語法如下:

func argv1 argv2 ...    

其中func表示函式名,argv1、argv2等表示傳遞給函式的引數

在函式中可以通過一些特殊的變數來訪問傳遞過來的引數:

$n,表示傳遞給函式的第n個引數,$1表示第一個引數等

S#,表示傳遞引數的總個數

$*,表示以"argv1 argv2 ..."的形式返回所有引數的值

S@,表示以"argv1" "argv2" ...的形式返回所有引數的值

示例:

function hi() {
    echo $#
    echo $*
}
# 執行:hi 1 2 3 4 5 6
# 結果:
6
1 2 3 4 5 6

7.1.4 函式返回值

在shell中,處理函式的返回值可以分為以下幾種情況來討論。

使用return語句返回某個數值,但是隻能返回0~255之前的整數值。

將返回的資料輸出到標準輸出,比如使用echo命令。

示例:

function getStr() {
    echo "hello"
}
# 使用:
str=$(getStr)
echo $str
# 結果:hello

相關文章