CodeGym /Adesua ahorow /Docker SELF /條件語句 (`if`, `else`) 和循環語句 (`for`, `while`) 在 bash 中的應用

條件語句 (`if`, `else`) 和循環語句 (`for`, `while`) 在 bash 中的應用

Docker SELF
等級 3 , 課堂 4
開放

條件語句 if, else 和循環語句 for, while 在 bash 中

1. Bash 中的條件:ifelse 和一些魔法

條件是幹嘛用的?

條件讓你的腳本可以根據輸入數據、變量或甚至命令的執行結果來做決定。舉例來說,你可能想檢查某個文件是否存在,或者確認伺服器是否可用,然後執行下一步操作。這時候 if 結構就派上用場啦。

基礎語法

以下是 Bash 中典型的 if 條件語法:

if [ 條件 ]; then
    # 如果條件為真,執行這裡的代碼
    echo "條件成立!"
else
    # 如果條件為假,執行這裡的代碼
    echo "條件未成立!"
fi

關鍵詞:

  • ifthenelsefi(關閉 if 區塊)是魔法詞語。沒有它們腳本就不能運行。
  • 方括號 [ ... ] 用於檢查條件。

範例 1:檢查文件是否存在

#!/bin/bash

FILE="/etc/passwd"

if [ -f $FILE ]; then
    echo "文件 $FILE 存在。"
else
    echo "文件 $FILE 沒找到。"
fi

解釋:

  • -f 用來檢查文件是否存在。
  • 如果文件存在,echo 就會輸出消息。否則,執行 else 區塊。

用命令作條件

你可以將命令的執行結果作為條件,因為在 Linux 中,所有東西都是命令。

範例 2:檢查網站是否可訪問

#!/bin/bash

if ping -c 1 example.com &> /dev/null; then
    echo "網站可訪問。"
else
    echo "網站不可訪問。"
fi

解釋:

  • ping -c 1 發送一個請求到伺服器。如果伺服器有回應,條件就會成立。
  • &> /dev/null 隱藏命令的輸出,避免干擾終端。

使用 elif 運算符

有時候光有 ifelse 不夠,需要考慮多個條件。這時候 elif 就派上用場了。

範例 3:判斷一天的時間段

#!/bin/bash

HOUR=$(date +%H)

if [ $HOUR -lt 12 ]; then
    echo "早安!"
elif [ $HOUR -lt 18 ]; then
    echo "午安!"
else
    echo "晚安!"
fi

解釋:

  • date +%H 返回當前時間的 24 小時格式。
  • 我們將當前時間與固定值進行比較:小於 12 — 早上,小於 18 — 下午,其他則為晚上。

2. Bash中的迴圈:學習的基礎

迴圈可以讓你的腳本在特定條件為真時反覆執行動作。這對於需要處理大量文件、重複多次執行某個任務或等待特定事件時特別有用。

迴圈 for

for 可以遍歷一個值的列表(例如文件或數字),並對每個值執行指定動作。

範例 4: 簡單的 for 迴圈

#!/bin/bash

for i in {1..5}; do
    echo "這是第 $i 次迭代"
done

說明:

  • {1..5} 是一個從1到5的數字列表。
  • 每次迭代時,變數 i 會取列表中的一個值。

範例 5: 列出目錄中的所有文件

#!/bin/bash

for FILE in /etc/*; do
    echo "正在處理文件: $FILE"
done

說明:

  • /etc/* 是目錄 /etc 中所有文件的列表。
  • 每次迭代時,變數 FILE 包含一個文件名。

迴圈 while

while 在指定條件為真時執行動作。

範例 6: 猜數字遊戲

#!/bin/bash

SECRET=5
GUESS=0

while [ $GUESS -ne $SECRET ]; do
    echo "請輸入你的猜測(1到10之間的數字):"
    read GUESS
done

echo "你答對了!"

說明:

  • [ $GUESS -ne $SECRET ] 表示條件成立,當輸入的數字 GUESS 不等於秘密數字 SECRET 時持續執行。

結合迴圈和條件

有時條件語句和迴圈需要配合使用。

範例 7: 檢查多個網站

#!/bin/bash

SITES=("example.com" "google.com" "nonexistent.website")

for SITE in ${SITES[@]}; do
    if ping -c 1 $SITE &> /dev/null; then
        echo "$SITE 可訪問。"
    else
        echo "$SITE 無法訪問。"
    fi
done

說明:

  • 數組 SITES 包含網站列表。
  • for 會遍歷數組中的每個網站。
  • if 通過 ping 檢查網站的可訪問性。

3. 實踐練習

檢查域名

寫一個腳本,接受域名作為參數並檢查其可用性。

提示:

if ping -c 1 $1 &> /dev/null; then
    echo "域名可用。"
else
    echo "域名不可用。"
fi

操作文件

寫一個腳本,檢查多個文件是否存在,並為每個文件輸出結果。

提示:

FILES=("file1.txt" "file2.txt" "/etc/passwd")
for FILE in ${FILES[@]}; do
    if [ -f $FILE ]; then
        echo "$FILE 存在。"
    else
        echo "$FILE 未找到。"
    fi
done

乘法表

寫一個使用嵌套循環的腳本,輸出從 1 到 10 的乘法表。

提示:

for i in {1..10}; do
    for j in {1..10}; do
        echo -n "$((i * j)) "
    done
    echo ""
done

現在你可以為你的 bash 腳本增加智能和邏輯了。條件允許你檢查狀態並做出決策,而循環可以幫助自動化重複任務。未來你將發現更多自動化任務的可能性!

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION