條件語句 if
, else
和循環語句 for
, while
在 bash 中
1. Bash 中的條件:if
、else
和一些魔法
條件是幹嘛用的?
條件讓你的腳本可以根據輸入數據、變量或甚至命令的執行結果來做決定。舉例來說,你可能想檢查某個文件是否存在,或者確認伺服器是否可用,然後執行下一步操作。這時候 if
結構就派上用場啦。
基礎語法
以下是 Bash 中典型的 if
條件語法:
if [ 條件 ]; then
# 如果條件為真,執行這裡的代碼
echo "條件成立!"
else
# 如果條件為假,執行這裡的代碼
echo "條件未成立!"
fi
關鍵詞:
if
、then
、else
和fi
(關閉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
運算符
有時候光有 if
和 else
不夠,需要考慮多個條件。這時候 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 腳本增加智能和邏輯了。條件允許你檢查狀態並做出決策,而循環可以幫助自動化重複任務。未來你將發現更多自動化任務的可能性!
GO TO FULL VERSION