1. 什麼是Shell腳本?

在Linux系統中,我們每天要和命令行打交道(比如用ls查看文件、cd切換目錄)。Shell就是系統提供的“命令解釋器”,它接收用戶輸入的命令並傳給系統執行。

Shell腳本,就是把一系列Linux命令按順序寫在一個文本文件裏,讓系統自動執行這些命令。比如你需要每天備份文件、檢查服務器狀態,手動執行重複的命令很麻煩,寫個腳本就能一鍵完成!

2. 爲什麼學Shell腳本?

  • 自動化重複任務:比如定時清理日誌、批量修改文件權限、自動部署程序。
  • 提高效率:替代手動操作,減少錯誤(比如腳本執行時按順序執行命令,不會漏步驟)。
  • 服務器管理必備:Linux服務器日常運維(監控、備份、故障排查)離不開腳本,是運維/開發的基礎技能。

3. 第一個Shell腳本:Hello World

學編程的第一步是打印“Hello World”,我們來寫個最簡單的Shell腳本!

步驟1:創建腳本文件
用編輯器(比如nanovim)創建一個.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開始,逐步嘗試變量、條件、循環,很快就能寫出實用的腳本!

小夜