Bash 中的函式
本教程通過使用不帶 function 關鍵字的函式和帶 function 關鍵字的函式來解釋 Bash 中的基本函式及其在 Bash 指令碼中的用法。
Bash 中的函式
Bash 中的函式是一組完成特定任務的命令。我們可以一遍又一遍地使用函式;這有助於避免重複編寫同一組命令。函式還使指令碼更具可讀性。
通常,函式接收資料、處理資料並返回一個值。但是,在 bash 指令碼中,函式只返回最後一個命令的退出狀態。
退出狀態是 0 和 255 之間的任何值。退出狀態 0 表示命令已成功執行。
在 Bash 中定義函式
在 Bash 中,有兩種符號來宣告函式。第一種表示法使用帶括號的函式名稱,後跟花括號,如下所示。
name_of_function(){ command1 command2 } 上面的符號也可以寫成一行。
name_of_function(){command1; command2} 第二種表示法使用 function 關鍵字宣告函式,後跟括號和花括號,如下所示。
function name_of_function(){ command1 command2 } 我們還在一行中宣告瞭該函式,如下所示。
function name_of_function(){command1; command2} 示例函式
下面的指令碼演示了在 bash 指令碼中使用函式。首先,我們定義函式,然後通過呼叫它來執行它。下面的指令碼使用第一種語法,即使用函式名後跟括號和大括號。
我們定義了一個名為 greet 的函式;花括號表示函式的主體。我們在函式體內有兩個 echo 語句,將文字列印到標準輸出。
要在 Bash 中呼叫函式,請鍵入函式的名稱。下面指令碼的最後一行呼叫函式 greet。
#!/bin/bash greet(){ echo "Hello, World!" echo "Bash is Fun!" } greet 該指令碼將以下輸出列印到標準輸出。
Hello, World! Bash is Fun! 下面的 bash 指令碼使用 function 關鍵字後跟函式名稱 add 來定義一個函式。add 函式使用 expr 命令將兩個數字 3 和 7 相加,並將總和分配給 var 變數。echo 命令將 var 變數的值顯示到標準輸出。
帶有函式名稱的最後一行用於呼叫函式以執行。
#!/bin/bash function add(){ var=`expr 3 + 4` echo $var } add Bash 函式中的變數範圍
在 Bash 中,預設情況下所有變數都是全域性變數。我們可以在 Bash 指令碼的任何地方訪問全域性變數,甚至在函式內部。在函式內部定義的變數也是 Bash 中的全域性變數。
要在 Bash 中的函式內定義區域性變數,我們使用 local 關鍵字。
下面的指令碼通過定義全域性變數 x 和 y 以及 add 函式中的一個稱為 sum 的區域性變數來演示變數範圍。
#!/bin/bash x=2 y=4 function add(){ local sum sum=`expr $x + $y` echo $sum } add 在上面的指令碼中,變數 x 和 y 是全域性變數。我們可以在指令碼的任何地方訪問這些。變數 sum 是一個區域性變數,因為已使用 local 關鍵字來定義它。
我們只能訪問定義的函式體內的區域性變數。在這種情況下,區域性變數 sum 只能在 add 函式的主體內使用。在 add 函式體之外訪問區域性變數 sum 將引發錯誤。
Bash 函式中的返回值
Bash 函式在呼叫其他程式語言中的函式時不會返回值。Bash 函式僅返回要執行的最後一個命令的退出狀態。
退出狀態可以是 0 和 255 之間的任何值。退出狀態 0 表示命令已成功執行。我們可以通過列印 $? 的值來訪問退出狀態。
當呼叫 add 函式時,它會執行其主體內的命令。第一行將 expr 命令的結果賦給 sum 變數。
第二行使用 echo 命令將 sum 變數的值列印到標準輸出。最後一行將退出狀態值列印到標準輸出。
列印的退出狀態是先前執行的命令的退出狀態;退出狀態程式碼用於顯示 sum 變數值的 echo 命令。
#!/bin/bash add(){ sum=`expr 2 + 3` echo "Sum: $sum" echo "Exit Status: $?" } add 執行指令碼會向標準終端顯示以下輸出。
Sum: 5 Exit Status: 0 將引數傳遞給 Bash 函式
要將引數傳遞給 bash 函式,請在呼叫函式時將引數放在以空格分隔的函式名旁邊。 $n 表示法可以訪問引數。
n 表示引數在函式名旁邊的位置。在我們的例子中,$1 代表第一個引數 1,$2 代表第二個引數 2。
function add(){ sum=`expr $1 + $2` echo $sum } add "1" "2" 變數 $0 保留表示函式名,而 $# 儲存傳遞給函式的位置引數的數量。
上面的指令碼將以下輸出生成到標準輸出。
3 