1. 什麼是Shell腳本?¶
在Linux系統中,我們每天要和命令行打交道(比如用ls查看文件、cd切換目錄)。Shell就是系統提供的“命令解釋器”,它接收用戶輸入的命令並傳給系統執行。
而Shell腳本,就是把一系列Linux命令按順序寫在一個文本文件裏,讓系統自動執行這些命令。比如你需要每天備份文件、檢查服務器狀態,手動執行重複的命令很麻煩,寫個腳本就能一鍵完成!
2. 爲什麼學Shell腳本?¶
- 自動化重複任務:比如定時清理日誌、批量修改文件權限、自動部署程序。
- 提高效率:替代手動操作,減少錯誤(比如腳本執行時按順序執行命令,不會漏步驟)。
- 服務器管理必備:Linux服務器日常運維(監控、備份、故障排查)離不開腳本,是運維/開發的基礎技能。
3. 第一個Shell腳本:Hello World¶
學編程的第一步是打印“Hello World”,我們來寫個最簡單的Shell腳本!
步驟1:創建腳本文件
用編輯器(比如nano或vim)創建一個.sh文件(.sh是Shell腳本的默認擴展名):
nano test.sh # 用nano編輯器打開,沒有nano的話用vim test.sh
步驟2:寫入腳本內容
在文件中輸入以下內容(每行一個命令):
#!/bin/bash # 告訴系統用bash解釋器執行(必須放在第一行)
echo "Hello, Linux Server!" # 打印一句話
#!/bin/bash:Shebang行,指定腳本用bash執行(如果是其他Shell如zsh,改成#!/bin/zsh)。echo:輸出命令,類似Windows的echo。
步驟3:保存並退出
- 在nano中:按Ctrl+O保存(輸入文件名test.sh,回車),再按Ctrl+X退出。
步驟4:給腳本執行權限
Shell腳本默認是“可讀可寫”,但沒有“執行”權限,需要用chmod命令賦予:
chmod +x test.sh # +x表示給所有者添加執行權限
步驟5:運行腳本
直接執行腳本文件(注意路徑,當前目錄用./):
./test.sh
輸出結果:
Hello, Linux Server!
4. Shell腳本基礎語法¶
變量與賦值¶
Shell腳本中可以定義變量,格式爲變量名=值(等號兩邊不能有空格!)。
示例:
#!/bin/bash
name="Linux" # 定義變量name,值爲"Linux"
version=5 # 定義數字變量version
echo "Hello, $name! Version $version" # 用$變量名調用變量
執行結果:
Hello, Linux! Version 5
常用系統變量:
- $PATH:系統命令路徑(比如echo $PATH可查看所有可直接執行的命令)。
- $HOME:用戶主目錄(比如echo $HOME顯示/home/你的用戶名)。
條件判斷(if-else)¶
如果需要根據條件執行不同命令,用if語句。格式:
if [ 條件 ]; then
條件成立時執行的命令
else
條件不成立時執行的命令
fi # 結束if塊
示例:判斷文件是否存在
#!/bin/bash
file="test.txt"
if [ -f "$file" ]; then # -f表示判斷是否爲普通文件
echo "$file 存在!"
else
echo "$file 不存在,創建中..."
touch "$file" # 創建空文件
fi
循環(for/while)¶
循環用於重複執行命令,比如遍歷多個文件或執行重複操作。
for循環示例:打印1到5
#!/bin/bash
for i in {1..5}; do # {1..5}生成1到5的序列
echo "第 $i 次循環"
done
執行結果:
第 1 次循環
第 2 次循環
第 3 次循環
第 4 次循環
第 5 次循環
while循環示例:計算1+2+…+10
#!/bin/bash
sum=0
i=1
while [ $i -le 10 ]; do # -le表示小於等於
sum=$((sum + i)) # (( ))用於算術運算
i=$((i + 1))
done
echo "1到10的和是:$sum" # 輸出結果:55
5. 實戰:簡單的服務器監控腳本¶
現在結合前面的知識,寫一個腳本檢查磁盤空間,當/分區使用率超過80%時提醒!
#!/bin/bash
# 檢查根目錄磁盤使用率
disk_usage=$(df -h | grep "/$" | awk '{print $5}' | sed 's/%//') # 提取使用率(%去掉)
if [ $disk_usage -gt 80 ]; then # -gt表示大於
echo "警告:根分區使用率過高!當前使用率:$disk_usage%"
# 可選:發送郵件提醒(需安裝mailx)
# echo "根分區使用率超過80%,請清理空間!" | mail -s "磁盤警告" your@email.com
else
echo "根分區使用率正常:$disk_usage%"
fi
關鍵命令解釋:
- df -h:查看磁盤空間(-h顯示人類可讀單位,如GB、MB)。
- grep "/$":篩選根分區(/結尾)。
- awk '{print $5}':提取使用率(df輸出的第5列是使用率)。
- sed 's/%//':去掉百分號,轉爲數字。
6. 注意事項¶
- 權限問題:執行腳本前必須用
chmod +x 腳本名賦予執行權限。 - 變量賦值:等號兩側不能有空格,如
name = "Linux"會報錯。 - 路徑問題:執行腳本時用
./腳本名(當前目錄),或絕對路徑如/home/user/test.sh。
7. 學習資源推薦¶
- 基礎練習:在Linux終端手動敲命令,嘗試修改腳本中的變量、循環條件。
- 工具推薦:
bash幫助文檔(man bash)、在線Shell腳本編輯器(如replit.com)。 - 進階方向:學習
crontab定時任務(如crontab -e設置每天3點執行腳本)。
通過Shell腳本,你可以把複雜的手動操作變成自動化流程,讓Linux服務器管理更高效。從簡單的Hello World開始,逐步嘗試變量、條件、循環,很快就能寫出實用的腳本!