寫一個Bourne Again Shell(Bash)腳本可以是一個有價值的經驗,尤其是當你為其增加邏輯以確保其穩健性時。一種將這種邏輯融入其中、使你的腳本更智能的方法是使用條件語句,具體來說就是“bash if else”。
在這次深入探討中,你將理解Bash if-else和case語句的威力和細微之處。這將幫助你創建無錯誤的智能Bash腳本。我們還會加入一些最佳實踐,確保你像專業人士一樣編寫腳本。
興奮嗎?開始吧,提升你的Bash腳本能力!
舞台設置:前提條件
為了充分利用本教程,你應該先擁有一些基本的東西:
- A Linux or Windows system armed with Bash. For those on Windows, the Windows Subsystem for Linux (WSL) is your best bet.
- A code/text editor to write and refine your ‘bash if else’ scripts.
為什麼應該利用bash if else語句?
為什麼在Bash腳本中,條件語句如此受人尊敬?簡單來說,它們賦予了你的腳本基於預定條件的決策能力。
例如,你可以使用“bash if else”在嘗試刪除文件之前驗證其是否存在。或者,你可能想查看用戶是否擁有必要的權限才允許他們訪問資源。
將腳本注入 ‘bash if else’ 結構不僅增加了其靈活性,還增強了其效力。 想像一個設計用於清理文件夾中所有文件的腳本。 使用 ‘bash if else’,您可以精確地刪除僅在30天以上的文件,保留其餘部分。
深入研究 ‘bash if else’ 語句
現在,讓我們不再介紹,開始動手。 我們將從最普遍被接受的條件語句之一開始:’bash if else’ 語句。
在其核心,’bash if else’ 是將條件插入到您的 Bash 腳本中的入口。 請觀察其優雅的語法如下:
- 它以 if 關鍵字開始,後面跟著 [[ ]] 包裹的條件。 在此之後,執行 ‘bash if else’ 語句中的代碼,並以 fi 關鍵字結束。
- then 關鍵字將條件與滿足條件時執行的操作(或語句)分開。 這個操作塊可以跨越多行,用分號 (;) 分隔。
想像一下腳本化的登錄系統。 在授予訪問權限之前,它會提示輸入正確的用戶名:
1. 啟動終端並使用您喜歡的文本編輯器初始化一個新的 bash_if_demo.sh 文件。 這將是我們理解 ‘bash if else’ 語句的遊樂場。
2. 將下面提供的“bash if else”示例嵌入到您的bash_if_demo.sh文件中。插入後,保存修改並退出編輯器。
示例“bash if else”腳本提示輸入用戶名。如果輸入了預期的用戶名,則顯示歡迎消息,並附帶當前日期和時間。
為了將用戶訪問嘗試的日期和時間記錄下來,可以將其用於未來的分析。
介紹行#!/bin/bash(通常稱為前言)指示系統使用哪個解釋器來處理腳本中的後續代碼。這裡,我們選擇了“bash”解釋器。
3. 現在,讓我們測試一下我們的「bash if else」腳本。執行以下命令:
請注意,無論您使用哪種Bash shell變體,都應以「bash」作為腳本名稱的前綴。這確保系統使用Bash來執行腳本。
輸入“ATA”並按Enter。結果應該類似於以下內容:

如果您輸入的不是“ATA”,歡迎消息將不會顯示在輸出中。只會展示當前的日期和時間。這是由於「bash if else」語句檢查與$NAME變量中的值的精確匹配而產生的行為。
請注意,「bash if else」語句區分大小寫。因此,“ata”、“aTa”、“Ata”等都與“ATA”不同。

請始終使用各種輸入來測試您的「bash if else」腳本。這確保腳本按預期運行。
深入挖掘:嵌套的「bash if else」語句
您已經掌握了製作「bash if else」語句的基本知識。儘管這基礎知識足以應對簡單的任務,但複雜的腳本通常需要高級結構。這就是嵌套的「bash if else」語句發揮作用的地方。基本上,它是一個包含一個或多個額外「if」語句的「if」語句。
下面的結構說明了嵌套「bash if else」語句的基本語法。在這裡,外部的if [[ 條件 ]]
子句包含僅在滿足條件時可執行的代碼。在我們的上下文中,嵌套的代碼是另一個「if」語句。
if [[ 條件 ]]
– 這代表外部的 ‘bash if else’ 敘述。嵌套的代碼(另一個 ‘if’ 敘述)僅在陳述的條件成立時才執行。if [[ 條件2 ]]
– 這代表內部的 ‘bash if else’ 子句。其中的代碼僅在兩個條件都滿足時才執行。
讓我們深入探討。在加強我們之前的 ‘bash if else’ 範例時,現在我們將包括一個詢問密碼的 if
敘述:
1. 首先,使用您喜歡的文本編輯器建立一個名為 bash_nested_if_demo.sh 的新文件。
2. 將下面提供的 ‘bash if else’ 代碼轉移到 bash_nested_if_demo.sh 文件中,保存更改,然後關閉編輯器。
這個 ‘bash if else’ 代碼提示輸入名稱和密碼。如果名稱和密碼的條件符合,就會顯示特定的消息。如果不匹配,輸出只顯示當前的日期和時間。
3. 現在,讓我們看看這個’bash if else’腳本的運行情況。執行以下命令:
為了獲得最佳結果,請將ATA作為用戶名輸入,並將pwd123作為密碼輸入。

如果您的輸入與“ATA”或“pwd123”不符,您將只收到有關當前日期和時間的反饋。這是因為’bash if else’結構需要滿足兩個條件。

解碼“Bash If Else”語句
‘Bash if else’語句是Bash腳本中的基石,為您的腳本提供了決定性的能力。然而,理解使用’if’語句並不是沒有缺點。
過度依賴「if」可能會讓您的代碼變得混亂,尤其是當涉及多個嵌套的「if」語句時,使其變得冗長且具有挑戰性。這樣的腳本有可能變成“意大利麵代碼”,其特點是讀取性降低且複雜度增加。
那麼,如何使您的「bash if else」腳本保持易於理解?選擇使用「if else」語句而不是一堆嵌套的「if」語句。「else」關鍵字提供了在「if」條件不滿足時指定要執行的代碼塊的便利性。
為了更清晰地了解,請考慮下面的「Bash If Else」語法,其中:
if [[ 條件 ]]
– 在這裡,“bash if else”語句包括當所述條件有效時觸發的代碼(語句1
)。else
– 這是「bash if else」結構的一部分。else
語句包含了在前一個if
子句中的條件不滿足時執行的代碼(語句2
)。
想像一下制作一個簡單的“bash if else”遊戲,系統期望從用戶那裡獲得一個隨機數:
1. 首先,創建一個名為bash_if_else_demo.sh的新文件。
2. 將後續的「bash if else」代碼集成到您的bash_if_else_demo.sh文件中,保存修改,然後退出。
基本的“bash if else”代碼提示用戶輸入他們的幸運數字。如果輸入是偶數,它會顯示“您贏了!”消息。相反,奇數將觸發“您輸了!”輸出。
3. 要觀察 ‘bash if else’ 腳本的運作,執行以下命令:
輸入偶數後,應該看到 “您使用 ‘bash if else’ 贏了!” 的消息。相反,輸入奇數應該會產生 “您使用 ‘bash if else’ 輸了!” 的反饋。

要豐富 ‘bash if else’ 腳本,考慮加入一個段落,確定用戶輸入的是一個字母還是一個獨特字符,而不是一個數字。
解碼 ‘Bash If Else’ 和 Case 語句
到目前為止,您已經探索了在 Bash 腳本中做出決策的幾種方法,即 ‘bash if else’ 語句。但是 Bash 還提供了另一種做出決策的途徑——case
語句。
與 ‘bash if else’ 類似,case
語句擅長於根據指定條件執行代碼序列。與嵌套的 ‘bash if else’ 情景相比,case 語句的一個顯著優點是其極其簡潔和清晰。
為了充分理解「bash if else」的替代方案,讓我們深入研究case語句的語法:
case $VAR in
– 這個case結構的片段將$VAR
變量與定義的模式進行比較,直到找到匹配為止。pattern1)
和pattern2)
– 這些是要進行測試的標準,一旦檢測到匹配,相應的代碼(statement1
或statement2
)將被執行。esac
– 結束case結構。
想像一下,你正在設計一個「bash if else」腳本,用戶輸入他們的國家名稱,腳本會顯示該國家的主要語言。
1. 開始生成一個名為bash_case_demo.sh的文件。
2. 將以下提供的「bash if else」代碼嵌入到你的bash_case_demo.sh文件中,然後保存並退出。
隨後的「bash if else」腳本將提示用戶輸入他們國家的名稱,並根據「case」模式打印提及國家中使用的主要語言。
3. 要親身體驗這個「bash if else」腳本,請使用以下命令:
您將會發現該腳本能夠準確地根據用戶選擇的國家突顯語言。
如果提供的國家不符合指定的模式,將觸發默認(*)模式,結果輸出為「未知」。

總結Bash條件語句
在本指南中,您已經開始了解Bash中的「bash if else」和其他條件語句。從簡單的「if」語句到複雜的「if-else」和「case」語句,您現在已經具備了有效Bash腳本的基本工具。
擁有了這些「bash if else」基礎知識,您可以更加熟練地構建Bash腳本,減少錯誤的發生。
但請記住,這僅僅是冰山一角。Bash提供了大量的條件語句。也許,考慮深入研究Bash elif語句和&&, OR和||運算符以獲得更深入的見解。通過奉獻精神,掌握Bash腳本編寫將很快成為可能!