shell中的函數
1. shell函數格式
shell函數的本質是一段可以重複使用的腳本代碼,這段代碼被提前編寫好,放在指定位置,使用時直接調用即可。
shell中的函數和C++、JAVA、Python、C#等其他編程語言中的函數類似,只是在語法中有所差別。
shell函數定義的語法格式:
function name() {
statements
[return value]
}
對各個部分的說明:
function是shell中的關鍵字,專門用來定義函數;
name是函數名;
statements是函數要執行的代碼,也就是一組語句;
return value表示函數的返回值,其中return式shell關鍵字,此處用方括號括起來表示這部分可以寫也可以不寫;
由{ }包圍的部分稱爲函數體,調用一個函數,實際上就是執行函數體中的代碼
函數定義的簡化寫法:
- 函數定義時可以不寫function關鍵字:
name() {
statements
[return value]
}
- 如果寫了function關鍵詞,可以省略函數名後面的括號:
function name {
statements
[return value]
}
推薦第二種寫法,可以在排查代碼錯誤時更方便。
2. 函數的調用
調用shell函數時可以給他傳遞參數,也可以不傳遞。
不傳遞參數時,直接給出函數名即可:
name
如果要傳遞參數,多個參數之間以空格分開:
name param1 param2 param3
注意:不管是哪種形式,函數名後都不需要帶括號
例:
#!/bin/bash
#定義函數
function url() {
echo "http://www.baidu.com"
}
#函數的調用
url
3. 函數的參數
和其他編程語言不同的是,shell函數在定義時不能指明參數,但在調用時卻可以傳遞參數,並且給它傳遞什麼參數它就接收什麼參數。
函數參數是shell位置參數的一種,在函數內部可以使用 $n 來接收
例如:$1 表示第一個參數,$2 表示第二個參數,以此類推。
除了$n,還有另外幾個比較重要的變量:
- $# :獲取傳遞參數的個數;
- $@ 或 $* :一次性獲取所有的參數
- $? :獲取函數的退出狀態(返回值)
例:
#!/bin/bash
#計算所有參數的和
function get_sum() {
local sum=0
for n in $@
do
((sum+=n))
done
return $sum
}
#調用函數並傳遞參數
get_sum 10 20 30 55 15
echo $?