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