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.sh,chmod +x backup.sh
2. 運行:./backup.sh
8. 進階建議¶
- 學習工具:掌握
grep(文本搜索)、awk(文本處理)、find(文件查找)等工具,提升腳本能力。 - 練習方式:從修改示例腳本開始(如添加參數、調整條件),逐步嘗試複雜場景(如定時任務
crontab)。 - 調試技巧:在腳本開頭加
set -x開啓調試模式,查看執行過程。
Shell腳本入門門檻低,但深入需長期實踐。從簡單重複任務開始,你會發現它能極大提升Linux操作效率!