在Linux命令列執行指令碼中的函式


介紹

BASH (Bourne Again SHell) 是一個 Unix shell 和命令語言,經常用於 Linux 和其他類 Unix 作業系統。BASH 的一個有用特性是在指令碼檔案中建立和使用函式。函式是完成特定任務的程式碼塊,可以從指令碼內部或命令列執行。

先決條件

在開始之前,您需要:

  • 一個帶有命令列介面(或 SSH 訪問許可權)的 Linux 系統。

  • 包含要執行的函式的指令碼(您的自定義指令碼)。

  • 執行指令碼所需的許可權(讀/寫/執行)。

本教程將向您展示如何在 Linux 系統的命令列中執行 BASH 指令碼中的函式。我們將首先建立一個包含函式的簡單 BASH 指令碼,然後演示如何從命令列呼叫該函式。

建立包含函式的 BASH 指令碼

首先,我們將建立一個包含一個簡單函式的 BASH 指令碼,該函式在終端上顯示一條訊息。開啟文字編輯器並建立一個名為“hello.sh”的新檔案,其中包含以下程式碼:

#!/bin/bash
# Define a function called "hello"
hello() {
   echo "Hello, Earth!"
}
# Call the function
hello

儲存檔案並使用 **chmod** 命令使其可執行:

$ chmod +x hello.sh

現在,我們可以使用 ./ 字首和指令碼名稱來執行指令碼:

$ ./hello.sh
Hello, Earth!

如您所見,指令碼執行並向終端列印訊息“Hello, Earth!”。

從命令列執行 bash 指令碼中的函式

要從命令列執行函式,我們需要使用 **bash -c** 命令,後跟指令碼檔名和函式名。

例如,要從 **hello.sh** 指令碼執行 hello 函式,可以使用以下命令:

$ bash -c "source hello.sh; hello"
Hello, World!

或者,我們可以使用 .(點)命令來引用指令碼並呼叫函式

$ . hello.sh; hello
Hello, World!

從 bash 指令碼執行函式時的高階操作

  • **向函式傳遞引數** - 您可以透過向函式傳遞引數來自定義函式的行為。例如,您可能想要建立一個函式,該函式以使用者名稱作為輸入並列印個性化問候。您可以使用變數(如 **$1, $2** 等)向 BASH 中的函式傳遞引數,這些變數分別表示傳遞給函式的第一個、第二個等引數。

  • **從函式返回值** - BASH 函式可以使用 return 命令返回值。例如,您可以建立一個函式來計算數字的平方並返回結果。**return** 命令後跟要返回的值,該值儲存在 **$?** 變數中,可以從呼叫指令碼或命令列訪問。

  • **除錯 BASH 函式** - 除錯 BASH 函式可能很困難,特別是對於剛接觸 BASH 指令碼的人來說。除錯函式的一種方法是使用 **set -x** 命令,該命令啟用指令碼的除錯輸出,並在執行每個命令之前列印該命令。您可以使用 **set +x** 命令關閉除錯輸出。其他工具(如 **bashdb** 或 **bashdbg**)提供了更高階的除錯功能,例如斷點和變數檢查。

執行帶有命令列引數的 Python 指令碼

要在命令列中執行指令碼中的函式,您需要指定指令碼名稱,後跟要執行的函式名稱。例如,如果您有一個名為 **myscript.py** 的指令碼,其中包含名為 **myFunction** 的函式,則可以像這樣從命令列執行該函式:

$ python myscript.py myFunction

如果函式接受任何引數,則可以在函式名稱之後傳遞它們,引數之間用空格分隔。例如,如果函式接受兩個引數 arg1 和 arg2,則可以像這樣執行它:

$ python myscript.py myFunction arg1 arg2

這是一個包含一個接受兩個引數並列印其和的函式的示例指令碼:

# myscript.py
def myfunction(arg1, arg2):
   print(arg1 + arg2)
myfunction(1, 2)

要從命令列執行此函式,請使用以下命令:

$ python myscript.py myFunction 1 2

輸出結果為 3。

結論

本教程向您展示瞭如何在 Linux 系統的命令列中執行 BASH 指令碼中的函式。我們首先建立了一個包含函式的簡單 BASH 指令碼,然後演示瞭如何使用 **bash -c** 和 . 命令從命令列呼叫該函式。如果您有任何問題或意見,請在下面的評論部分留下您的留言。

更新於:2023年1月4日

瀏覽量:15K+

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.