1. 什麼是Shell和Shell腳本?

在Linux世界裏,我們通過命令行與系統交互,而Shell就是這個交互的“中間人”——它是用戶與Linux內核之間的接口程序。你可以把它理解爲一個命令解釋器,負責接收你輸入的命令,然後傳遞給系統內核執行。

常見的Shell有很多種,比如bash(Bourne-Again Shell,大多數Linux默認使用)、sh(Bourne Shell)、zsh等。而Shell腳本,就是把一系列Linux命令按順序寫入一個文本文件,通過Shell解釋器批量執行,從而實現自動化任務。

舉個例子:如果你每天都需要手動執行“備份文件”“清理日誌”“檢查系統狀態”等重複操作,用Shell腳本寫一遍,以後直接運行腳本就能自動完成,不用每次手動敲命令。

2. 爲什麼要學Shell腳本?

自動化是核心價值。掌握Shell腳本能幫你:
- 提高效率:批量處理文件(如重命名、格式轉換)、定時任務(如日誌清理)。
- 系統管理:監控服務器狀態(如磁盤使用率、CPU佔用)、自動部署服務。
- 跨平臺複用:腳本可在不同Linux系統間通用,兼容性強。

對初學者來說,Shell腳本語法簡單,上手快,是Linux入門的必備技能。

3. 編寫第一個Shell腳本:Hello World

步驟1:準備編輯器
Linux系統自帶文本編輯器,新手推薦用nano(更簡單)或vim(更強大)。
nano爲例:在終端輸入nano hello.sh,會打開一個空白編輯窗口。

步驟2:編寫腳本內容
在編輯器中輸入以下內容(注意每一行的作用):

#!/bin/bash
# 這是一個Shell腳本示例
echo "Hello, Linux! 你好,世界!"
  • #!/bin/bash:指定腳本使用bash解釋器(必須放在第一行,否則可能無法識別)。
  • #開頭的是註釋,僅作說明,不會被執行。
  • echo是輸出命令,用於打印文本到屏幕。

步驟3:保存並退出
- 在nano中,按Ctrl+O保存,按Enter確認文件名;再按Ctrl+X退出。

步驟4:賦予執行權限
腳本默認是“只讀”的,需要添加執行權限:

chmod +x hello.sh
  • chmod +x:給文件添加“可執行”權限。

步驟5:運行腳本
在終端執行:

./hello.sh
  • 輸出結果:Hello, Linux! 你好,世界!
  • 注意:如果提示“權限不足”,確認步驟4已正確執行;如果提示“文件不存在”,檢查當前目錄是否是腳本所在位置(用pwd查看當前目錄,ls查看文件列表)。

4. Shell腳本的基本語法與常用命令

變量:Shell腳本中變量名需以字母或下劃線開頭,賦值時等號兩側無空格。
示例:

name="小明"
age=20
echo "姓名:$name,年齡:$age"  # 使用變量時加$前綴
  • 運行結果:姓名:小明,年齡:20

常用執行命令
- echo "文本":輸出文本(最常用)。
- pwd:顯示當前工作目錄。
- ls [目錄]:列出指定目錄下的文件(默認當前目錄)。
- cd [路徑]:切換目錄(如cd ~返回用戶主目錄)。
- date:顯示當前系統時間。

註釋
單行註釋:# 這是單行註釋
多行註釋:

: '
這是多行註釋
可以寫很多行
'

5. 條件判斷(if-else)

當需要根據條件執行不同操作時,用if-else結構。語法如下:

if [ 條件表達式 ]; then
    條件成立時執行的代碼
elif [ 另一條件 ]; then
    條件成立時執行的代碼
else
    所有條件不成立時執行的代碼
fi  # 結束if結構(必須寫)

示例1:判斷數值是否大於10

num=15
if [ $num -gt 10 ]; then  # -gt表示“大於”
    echo "$num 大於10"
elif [ $num -lt 5 ]; then  # -lt表示“小於”
    echo "$num 小於5"
else
    echo "$num 在5到10之間"
fi
  • 運行結果:15 大於10

示例2:判斷文件是否存在

file="test.txt"
if [ -f $file ]; then  # -f判斷是否是普通文件
    echo "$file 存在"
else
    echo "$file 不存在"
fi

6. 循環(for/while)

重複執行代碼塊時,用循環結構。

for循環:遍歷列表

# 遍歷1到5並打印
for i in {1..5}; do
    echo "第$i次循環"
done
  • 運行結果:
  第1次循環
  第2次循環
  第3次循環
  第4次循環
  第5次循環

while循環:條件滿足時重複

# 打印1到5的和
sum=0
i=1
while [ $i -le 5 ]; do  # -le表示“小於等於”
    sum=$((sum + i))  # 累加(注意$((...))是數值運算)
    i=$((i + 1))
done
echo "1到5的和是:$sum"  # 輸出:15

7. 綜合示例:自動備份腳本

需求:備份當前目錄下所有txt文件到backup目錄(不存在則創建),並打印備份狀態。

#!/bin/bash
# 定義變量
src_dir="."  # 當前目錄
backup_dir="./backup"
timestamp=$(date +%Y%m%d_%H%M%S)  # 獲取時間戳作爲備份文件名前綴

# 創建備份目錄(如果不存在)
if [ ! -d $backup_dir ]; then
    mkdir $backup_dir
    echo "創建備份目錄:$backup_dir"
fi

# 遍歷所有txt文件並備份
txt_files=$(ls $src_dir/*.txt 2>/dev/null)  # 忽略無txt文件時的錯誤
if [ -z "$txt_files" ]; then
    echo "當前目錄沒有txt文件,無需備份"
else
    for file in $txt_files; do
        cp $file $backup_dir/$(basename $file)_$timestamp.txt
        echo "已備份:$(basename $file)"
    done
    echo "備份完成!備份文件在:$backup_dir"
fi
  • 執行步驟:
    1. 保存爲backup.shchmod +x backup.sh
    2. 運行:./backup.sh

8. 進階建議

  • 學習工具:掌握grep(文本搜索)、awk(文本處理)、find(文件查找)等工具,提升腳本能力。
  • 練習方式:從修改示例腳本開始(如添加參數、調整條件),逐步嘗試複雜場景(如定時任務crontab)。
  • 調試技巧:在腳本開頭加set -x開啓調試模式,查看執行過程。

Shell腳本入門門檻低,但深入需長期實踐。從簡單重複任務開始,你會發現它能極大提升Linux操作效率!

小夜