首頁 > shell教程 閱讀:0更新時間:2020-03-28 02:18:31

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]
}

我建議使用標準的寫法,這樣能夠做到“見名知意”,一看就懂。

函數調用

調用 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%的其他從業者!

相關文章

優秀教程

国产亚洲欧美日韩