如何在 Linux Shell 程式設計中定義和使用函式

發表於2018-08-29

函式是一段可複用的程式碼。我們通常把重複的程式碼放進函式中並且在不同的地方去呼叫它。庫是函式的集合。我們可以在庫中定義經常使用的函式,這樣其它指令碼便可以不再重複程式碼而使用這些函式。

如何在 Linux Shell 程式設計中定義和使用函式

本文我們將討論諸多關於函式的內容和一些使用技巧。為了方便演示,我將在 Ubuntu 系統上使用 Bourne Again SHell (Bash)

呼叫函式

在 Shell 中呼叫函式和呼叫其它命令是一模一樣的。例如,如果你的函式名稱為 my_func,你可以在命令列中像下面這樣執行它:

如果你的函式接收多個引數,那麼可以像下面這樣寫(類似命令列引數的使用):

定義函式

我們可以用下面的語法去定義一個函式:

函式的主體可以包含任何有效的命令、迴圈語句和其它函式或指令碼。現在讓我們建立一個簡單的函式,它向螢幕上顯示一些訊息(注:直接在命令列裡寫)。

現在,讓我們執行這個函式:

不出所料,這個函式在螢幕上顯示了一些訊息。

在上面的例子中,我們直接在終端裡建立了一個函式。這個函式也可以儲存到檔案中。如下面的例子所示。

我們已經在 function.sh 檔案中定義了這個函式。現在讓我們執行這個指令碼:

你可以看到,上面的輸出和之前的是一模一樣的。

更多函式用法

在上一小節中我們定義了一個非常簡單的函式。然而在軟體開發的過程中,我們需要更多高階的函式,它可以接收多個引數並且帶有返回值。在這一小節中,我們將討論這種函式。

向函式傳遞引數

我們可以像呼叫其它命令那樣給函式提供引數。我們可以在函式裡使用美元 $ 符號訪問到這些引數。例如,$1 表示第一個引數,$2 代表第二個引數,以此類推。

讓我們修改下之前的函式,讓它以引數的形式接收資訊。修改後的函式就像這樣:

在上面的函式中我們使用 $1 符號訪問第一個引數。讓我們執行這個函式:

執行完後,生成如下資訊:

從函式中返回數值

跟其它程式語言一樣,Bash 提供了返回語句讓我們可以向呼叫者返回一些數值。讓我們舉例說明:

上面的函式向呼叫者返回 10。讓我們執行這個函式:

當你執行完,將會產生如下的輸出結果:

提示:在 Bash 中使用 $? 去獲取函式的返回值。

函式技巧

目前我們已經對 Bash 中的函式有了一些瞭解。現在讓我們建立一些非常有用的 Bash 函式,它們可以讓我們的生活變得更加輕鬆。

Logger

讓我們建立一個 logger 函式,它可以輸出帶有日期和時間的 log 資訊。

執行這個函式:

執行完,就會生成如下資訊:

顯示系統資訊

讓我們建立一個顯示 GNU/Linux 資訊的函式

執行完後會生成以下資訊:

在當前目錄下查詢檔案或者目錄

下面的函式從當前目錄下查詢檔案或者目錄:

讓我們使用下面的命令查詢 dir4 這個目錄:

當你執行完命令後,將會產生如下輸出:

數字時鐘

下面的函式在終端裡建立了一個簡單的數字時鐘:

函式庫

庫是函式的集合。將函式定義在檔案裡並在當前環境中匯入那個檔案,這樣可以建立函式庫。

假設我們已經在 utils.sh 中定義好了所有函式,接著在當前的環境下使用下面的命令匯入函式:

之後你就可以像呼叫其它 Bash 命令那樣執行庫中任何的函式了。

總結

本文我們討論了諸多可以提升效率的實用技巧。我希望這篇文章能夠啟發你去創造自己的技巧。

 

相關文章