幫助您學習 Linux 程式設計的 5 個 Bash 腳本範例
### 快速鏈接
⭐如何在 Bash 中列印 Hello World
⭐透過讀取輸入建立目錄
⭐使用命令列參數建立目錄
⭐使用 Bash 函數刪除文件
⭐建立一個用於算術計算的基本計算器
Bash 腳本代表了一種非常受歡迎且易於存取的方式,使用者可以透過該方式對基於 Linux 的計算設備進行程式設計。提供基本腳本範例將有助於理解底層流程並介紹 Bash 程式設計的基本原理。
如何在 Bash 中列印 Hello World
事實上,受人尊敬的「Hello World」演示可以很好地介紹任何編碼語言的複雜性,包括受人尊敬的 Bash 腳本語言。
要在 Bash 中產生精美的輸出,可以採用簡潔且富有表現力的命令列語法,該語法利用內建命令和參數。列印「Hello World」的過程涉及使用適當的參數呼叫 echo 實用程式以在終端螢幕上呈現文字。
請開啟適當的文字編輯器,例如 Microsoft Word 或 Google Docs,然後開始處理包含以下原始程式碼行的新文件:
⭐ Bash 腳本的第一行應始終如下所示:
#!/bin/bash
shebang 指令,以符號「#!」表示後面接著可執行二進位檔案的路徑並由作業系統的載入程式解釋,作為確定執行給定腳本的適當解釋器的關鍵元件。具體來說,當在腳本檔案中遇到shebang命令「#!/bin/bash」時,作業系統會呼叫Bash解釋器來執行對應的腳本。
⭐ 任何以 # 符號開頭的行都是註解。 shebang 行是一個特例,但您可以使用自己的註解來解釋您的程式碼。在第 2 行中新增註釋,例如:
# Print some text from a bash script
⭐ 您可以使用 echo 指令列印到標準輸出,後面接著要列印的值。在第 3 行新增以下內容:
echo "Hello World"
在 Bash 中建立腳本時,建議遵循命名約定,在腳本的檔案名稱中附加「.sh」檔案副檔名。雖然這不是嚴格要求的,但使用這樣的約定可以幫助使腳本更容易識別和組織。
⭐ 若要執行腳本,請使檔案可執行。將 chmod(「更改模式」)指令與 \+x(「可執行檔」)參數和 shell 腳本的名稱一起使用:
chmod \+x hello_world.sh
⭐ 使用此命令從其目錄中執行腳本:
./hello_world.sh
⭐ 當腳本運行時,它將在您的終端上列印文字「Hello World」:
透過讀取輸入建立目錄
合併通常在終端機中輸入的執行命令的功能,例如透過在腳本中使用 mkdir 命令建立新目錄,可以透過實作自訂腳本來實現。
⭐ 從與之前相同的 shebang 行開始:
#!/bin/bash
⭐ 提示使用者輸入目錄名稱,像以前一樣使用 echo 指令:
echo "Enter new directory name:"
⭐ 使用內建的讀取指令來取得使用者輸入。單一參數命名一個變數,shell 將在其中儲存輸入:
read newdir
⭐ 當您需要使用儲存在變數中的值時,請在其名稱前面加上美元符號 ( $ )。您可以將輸入變數的內容作為參數傳遞給 mkdir 命令,以建立新目錄:
mkdir $newdir
⭐ 當您執行此腳本時,它會提示您輸入。輸入有效的目錄名稱,您將看到腳本在當前目錄中建立它:
使用命令列參數建立目錄
許多 Linux 命令列程式允許在執行時提供參數,以取代手動輸入,以影響其操作。
在腳本的範圍內,可以使用變數 $1 到 $9 分別表示參數一到九的值。使用這些變數的具體應用或目的可能會根據當前給定任務的要求而變化。
⭐ 使用上一個範例中的 mkdir 指令建立一個目錄。然而,這一次,使用內建變數 $1:
#!/bin/bash
mkdir $1
⭐ 運行腳本,這次將您選擇的新目錄名稱作為參數傳遞:
./arg_dir.sh Test
在不提供任何輸入的情況下執行腳本時,可能會遇到以“mkdir”開頭的使用錯誤。
如果沒有命令列參數,第一個位置參數 ($1) 將產生空值。在腳本中執行“mkdir”命令時,沒有傳遞給它的參數,導致“mkdir”命令傳回錯誤。為了避免這個問題,人們可以自己驗證這些條件並提供更用戶友好的錯誤訊息。
⭐ 一如既往,從 shebang 行開始:
#!/bin/bash
⭐ 在呼叫 mkdir 之前,檢查第一個參數是否為空(即沒有參數)。您可以使用 Bash 的 if 語句來執行此操作,該語句會根據條件執行程式碼:
if ["$1" = ""]; then
⭐ 如果第一個參數為空,則列印錯誤並退出腳本:
echo "Please provide a new directory name as the first argument"
exit
⭐ 稍微奇怪的「fi」關鍵字(「if」反轉)表示 Bash 中 if 語句的結束:
fi
⭐ 您的腳本現在可以像以前一樣繼續,以處理存在參數的情況:
mkdir $1
在執行目前軟體程式的更新迭代時,必須提供所有必要的輸入參數;如果不這樣做,將導致產生警報通知,通知用戶此類監督。
使用 Bash 函數刪除文件
如果遇到重複的程式碼,將其封裝在函數中可能會有所幫助。這允許透過簡單地根據需要呼叫它來在任何需要的點實現函數的邏輯。
當然,這裡以刪除指定檔案的函數為例。
⭐ 從 shebang 行開始:
#!/bin/bash
⭐ 透過編寫函數名稱、後面跟著空括號和大括號內的命令來定義函數:
del_file() {
echo "deleting $1"
rm $1
}
然後,您可以呼叫該函數並向其傳遞要刪除的檔案的名稱:
del_file test.txt
當執行呼叫函數時,它會分配一個唯一的特殊變數“$?”以及最後運行的命令的退出代碼。此退出代碼是評估錯誤的有效方法,可用於確定「rm」指令是否成功執行,如本例所示。
if [ $? -ne 0 ]; then
echo "Sorry, could not delete the file"
fi
建立一個用於算術計算的基本計算器
以下實例舉例說明了基本的計算設備。執行時,使用者將輸入兩個數字並選擇一個算術函數來對它們執行。
這是 calc.sh 的程式碼:
#!/bin/bash
# Take operands as input
echo "Enter first number: "
read a
echo "Enter second number: "
read b
# Input type of operation
echo "Enter Arithmetic Operation Choice :"
echo "Addition"
echo "Subtraction"
echo "Multiplication"
echo "Division"
read choice
# calculator operations
case $choice in
1)
result=`echo $a \+ $b | bc`
;;
2)
result=`echo $a - $b | bc`
;;
3)
result=`echo $a \* $b | bc`
;;
4)
result=`echo "scale=2; $a / $b" | bc`
;;
esac
echo "Result: $result"
考慮 Bash 中「case」表達式的使用,它充當各種程式語言中存在的 switch 語句的類似結構。這使得能夠根據多個預定值評估參數的價值,隨後根據此類評估的結果執行相應的功能。
該腳本使用 bc 指令來執行每個算術運算。