Shell函數詳解(函數定義、函數調用)
shell 函數的本質是一段可以重復使用的腳本代碼,這段代碼被提前編寫好了,放在了指定的位置,使用時直接調取即可。
Shell 中的函數和C++、Java、Python、C# 等其它編程語言中的函數類似,只是在語法細節有所差別。
Shell 函數定義的語法格式如下:
由
和其它編程語言不同的是,Shell 函數在定義時不能指明參數,但是在調用時卻可以傳遞參數,并且給它傳遞什么參數它就接收什么參數。
Shell 也不限制定義和調用的順序,你可以將定義放在調用的前面,也可以反過來,將定義放在調用的后面。
http://c.biancheng.net/shell/
你可以將調用放在定義的前面,也就是寫成下面的形式:
2) 定義一個函數,計算所有參數的和:
100
此處我們借助 return 關鍵字將所有數字的和返回,并使用
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 name {
statements
[return value]
}
函數調用
調用 Shell 函數時可以給它傳遞參數,也可以不傳遞。如果不傳遞參數,直接給出函數名字即可:name
如果傳遞參數,那么多個參數之間以空格分隔:name param1 param2 param3
不管是哪種形式,函數名字后面都不需要帶括號。和其它編程語言不同的是,Shell 函數在定義時不能指明參數,但是在調用時卻可以傳遞參數,并且給它傳遞什么參數它就接收什么參數。
Shell 也不限制定義和調用的順序,你可以將定義放在調用的前面,也可以反過來,將定義放在調用的后面。
實例演示
1) 定義一個函數,輸出 Shell 教程的地址:#!/bin/bash #函數定義 function url(){ echo "/d/file/202003/mde5ded1ww21248.html } #函數調用 url運行結果:
http://c.biancheng.net/shell/
你可以將調用放在定義的前面,也就是寫成下面的形式:
#!/bin/bash #函數調用 url #函數定義 function url(){ echo "/d/file/202003/mde5ded1ww21248.html }
2) 定義一個函數,計算所有參數的和:
#!/bin/bash function getsum(){ local sum=0 for n in $@ do ((sum+=n)) done return $sum } getsum 10 20 55 15 #調用函數并傳遞參數 echo $?運行結果:
100
$@
表示函數的所有參數,$?
表示函數的退出狀態(返回值)。關于如何獲取函數的參數,我們將在《Shell函數參數》一節中詳細講解。此處我們借助 return 關鍵字將所有數字的和返回,并使用
$?
得到這個值,這種處理方案在其它編程語言中沒有任何問題,但是在 Shell 中是非常錯誤的,Shell 函數的返回值和其它編程語言大有不同,我們將在《Shell函數返回值》中展開討論。beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。
通俗易懂,深入淺出,一篇文章只講一個知識點。
文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。
文章不涉及代碼,不燒腦細胞,人人都可以學習。
當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!