效率飆升!七個超實用 Shell 腳本,告別重復勞動,解放你的雙手!
還在為重復的系統操作、文件整理、服務監控而頭疼?Shell腳本就是你效率翻倍的秘密武器!今天分享7個簡單易學的自動化腳本,覆蓋備份、監控、清理、檢查等高頻場景,新手也能輕松上手,讓你的Linux/Unix運維管理瞬間起飛!
為什么你需要Shell腳本?
- 自動化重復工作: 把那些枯燥的命令行操作打包成腳本,一鍵執行!
- 減少人為錯誤: 腳本嚴格執行預設步驟,避免手動操作的疏忽。
- 提升工作效率: 把時間花在更有價值的事情上,而不是一遍遍敲命令。
- 系統管理利器: 監控、維護、部署,腳本都能幫你搞定。

干貨來襲!七個提升效率的Shell腳本:
1. 自動備份小能手:重要文件再也不怕丟!
場景: 定期自動備份你的工作目錄,壓縮存檔到備份位置(比如 /backups),文件名帶上日期,清晰明了。
腳本代碼:
#!/bin/bash
# 定義你的重要文件夾和備份存放地
SOURCE_DIR="/home/yourname/important_stuff" # ?? 改成你的重要目錄
BACKUP_DIR="/backups" # ?? 改成你的備份目錄
DATE=$(date +%Y-%m-%d) # 獲取今天的日期 (格式:年-月-日)
# 創建壓縮包備份 (tar.gz格式)
tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" "$SOURCE_DIR"
# 告訴你備份完成啦!
echo "[SUCCESS] Backup saved to: $BACKUP_DIR/backup_$DATE.tar.gz"關鍵點說明:
- tar -czf: 打包 (c) + 用gzip壓縮 (z) + 指定文件名 (f)。生成的 .tar.gz 文件又小又好管理。
- date +%Y-%m-%d: 獲取當前日期,讓備份文件名字自帶時間戳,方便查找歷史版本。
怎么用? 保存為 backup.sh,用 cron 定時任務設置每天/每周自動跑!
2. 磁盤空間守衛者:快滿了?馬上發警報!
場景: 根分區 / 的使用率超過你設定的警戒線(比如90%),自動發郵件提醒管理員,避免磁盤爆滿導致系統卡死。
腳本代碼:
#!/bin/bash
THRESHOLD=90 # 設置你的警戒線百分比 (90%)
CURRENT_USAGE=$(df / | awk 'NR==2 {gsub("%","",$5); print $5}') # 提取根分區當前使用率數值
# 判斷是否超過警戒線
if [ "$CURRENT_USAGE" -gt "$THRESHOLD" ]; then
# 發送郵件報警 (需要提前配置好系統郵件發送功能)
echo "WARNING! Disk usage on $(hostname) is at ${CURRENT_USAGE}%!" | mail -s "?? DISK SPACE ALERT! ??" admin@yourcompany.com # ?? 改成你的郵箱
fi關鍵點說明:
- df /: 查看根分區的磁盤使用情況。
- awk 'NR==2 {gsub("%","",$5); print $5}': 魔法在這里!提取 df 輸出的第二行(數據行),去掉第五列(使用率)的 % 符號,只留下純數字。
- mail -s: 發送郵件 (-s 指定主題)。 ??注意:需要預先配置好 mailutils或sendmail等郵件服務。
怎么用? 保存為 disk_alert.sh,用 cron 設置每5分鐘或每小時檢查一次。
3. 日志清潔工:自動清理陳年老日志!
場景: 定期清理 /var/log 目錄下那些超過30天的 .log 日志文件,釋放寶貴磁盤空間。
腳本代碼:
#!/bin/bash
# 查找并刪除 /var/log 下超過30天的 .log 文件
find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} \;
echo "Old log files (>30 days) in /var/log have been cleaned up."關鍵點說明:
- find /var/log: 在 /var/log 目錄下查找。
- -type f: 只找文件(不包括目錄)。
- -name "*.log": 只找文件名以 .log 結尾的。
- -mtime +30: 只找修改時間在30天之前的文件。
- -exec rm -f {} \;: 對找到的每一個文件執行 rm -f(強制刪除)命令。{} 代表找到的文件名。
怎么用? 保存為 clean_logs.sh,用 cron 設置每周或每月跑一次。??謹慎操作!確保路徑和條件正確,避免誤刪。
4. 服務器健康檢查員:一鍵 ping 所有機器!
場景: 快速檢查你管理的多臺服務器或網絡設備是否在線,狀態一目了然。
腳本代碼:
#!/bin/bash
# 把你的服務器IP或域名放進這個列表
SERVERS=("192.168.1.100" "192.168.1.101" "db01.yourdomain.com" "web-server") # ?? 改成你的服務器
echo "= Starting Server Status Check ="
for server in "${SERVERS[@]}"; do
# Ping一次,靜默執行(不顯示輸出),根據退出狀態碼判斷
if ping -c 1 -W 2 "$server" &> /dev/null; then
status="? UP"
else
status="? DOWN"
fi
echo "- $server: $status"
done
echo "= Check Complete ="關鍵點說明:
- SERVERS=(...): 定義一個數組,里面放你要檢查的所有服務器地址。
- for server in ...: 循環遍歷數組中的每個服務器地址。
- ping -c 1 -W 2: 發送1個探測包 (-c 1),最多等待2秒 (-W 2)。
- &> /dev/null: 把命令的標準輸出和錯誤輸出都丟棄(不顯示在屏幕上)。
- if ...; then ... else ... fi: 根據 ping 命令的退出狀態碼(0表示成功/在線,非0表示失敗/離線)判斷服務器狀態,并輸出帶表情符號的結果。
怎么用? 保存為 server_check.sh,需要檢查時直接運行 ./server_check.sh。
5. 密碼生成神器:高強度隨機密碼秒生成!
場景: 快速生成一個包含大小寫字母、數字和特殊符號的強密碼(比如12位),用于賬戶注冊或密鑰設置。
腳本代碼:
#!/bin/bash
LENGTH=12 # ?? 設置你想要的密碼長度
# 利用 /dev/urandom 生成隨機字節,過濾出需要的字符集
PASSWORD=$(tr -dc 'A-Za-z0-9!@#$%^&*()_+-=[]{}|;:,.<>?' < /dev/urandom | head -c "$LENGTH")
echo "?? Your secure password: $PASSWORD"關鍵點說明:
- /dev/urandom: Linux系統的優質隨機數源(足夠用于生成密碼)。
- tr -dc '...': -d 刪除,-c 取反。意思是“刪除所有不在指定字符集 A-Za-z0-9!@#$%^&*()_+-=[]{}|;:,.<>? 中的字符”。這樣就只留下了我們想要的字符。
- head -c "$LENGTH": 取過濾后字符流的前 $LENGTH 個字符。
怎么用? 保存為 gen_passwd.sh,需要密碼時運行 ./gen_passwd.sh。??注意:/dev/urandom在絕大多數Linux系統上安全,但生成極高安全要求的密鑰對時,/dev/random或專用工具更佳。
6. DNS穩定性哨兵:實時監控域名解析!
場景: 持續監測某個重要域名(如你的網站域名)的DNS解析是否正常。一旦解析失敗(返回空結果),立即記錄時間和錯誤信息到日志文件。
腳本代碼:
#!/bin/bash
DOMAIN="your-critical-domain.com" # ?? 改成你要監控的關鍵域名
LOG_FILE="dns_monitor.log" # 日志文件名
echo "Starting DNS monitoring for $DOMAIN. Press Ctrl+C to stop. Logs in $LOG_FILE"
while true; do # 無限循環
# 嘗試解析域名,只取最簡短的IP輸出
RESULT=$(dig +short "$DOMAIN" 2> /dev/null)
# 如果解析結果為空字符串
if [ -z "$RESULT" ]; then
echo "[ERROR][$(date +'%Y-%m-%d %H:%M:%S')] DNS resolution FAILED for $DOMAIN!" >> "$LOG_FILE"
fi
sleep 5 # 每5秒檢查一次 (?? 根據需要調整間隔)
done關鍵點說明:
- dig +short: 使用 dig 工具進行DNS查詢,+short 參數讓它只輸出最核心的解析結果(通常是IP地址),簡潔明了。
- [ -z "$RESULT" ]: 檢查變量 RESULT 是否為空字符串 (-z)。空字符串意味著 dig 沒有返回有效的解析結果(DNS失敗)。
- >>"$LOG_FILE": 將錯誤信息追加 (>>) 到日志文件末尾。
- while true; do ... sleep 5; done: 創建一個無限循環,每循環一次休眠5秒,實現持續監控。按 Ctrl+C 停止。
怎么用? 保存為 dns_watchdog.sh,后臺運行 (nohup ./dns_watchdog.sh &)。出現問題就查 dns_monitor.log。
7. 網站健康檢測儀:HTTP狀態碼實時追蹤!
場景: 持續檢查你的網站或API服務是否可用。每次檢查都記錄時間、目標URL和HTTP狀態碼(200表示成功,其他如404/500表示有問題)到日志文件。
腳本代碼:
#!/bin/bash
URL="https://your-website.com/api/health" # ?? 改成你要監控的URL
LOG_FILE="http_health.log" # 日志文件名
CHECK_INTERVAL=10 # 檢查間隔(秒) ?? 調整
echo "Monitoring HTTP status of $URL. Press Ctrl+C to stop. Logs in $LOG_FILE"
while true; do
# 獲取HTTP狀態碼 (靜默訪問,只輸出狀態碼)
STATUS_CODE=$(curl -o /dev/null -s -w "%{http_code}" "$URL")
# 記錄到日志 (帶上時間戳)
TIMESTAMP=$(date +'%Y-%m-%d %H:%M:%S')
if [ "$STATUS_CODE" -eq 200 ]; then
echo "[OK][$TIMESTAMP] $URL - Status: $STATUS_CODE" >> "$LOG_FILE"
else
echo "[PROBLEM][$TIMESTAMP] $URL - Status: $STATUS_CODE" >> "$LOG_FILE"
fi
sleep "$CHECK_INTERVAL"
done關鍵點說明:
(1) curl -o /dev/null -s -w "%{http_code}":
- -o /dev/null: 把訪問到的網頁內容丟棄(不保存也不顯示)。
- -s: 靜默模式(不顯示進度條或錯誤信息)。
- -w "%{http_code}": 告訴 curl 在訪問結束后,只輸出 HTTP 響應狀態碼(如 200, 404, 500, 503 等)。
(2) [ "$STATUS_CODE" -eq 200 ]: 判斷獲取到的狀態碼是否等于200 (OK)。
(3) 日志清晰區分了成功 ([OK]) 和其他狀態 ([PROBLEM]),方便后續分析排查。
怎么用? 保存為 http_monitor.sh,后臺運行 (nohup ./http_monitor.sh &)。定期查看 http_health.log 或設置報警(當非200狀態出現時)。
總結
這7個腳本只是Shell自動化能力的冰山一角!它們展示了如何用簡潔的代碼解決日常運維中的痛點.
動手試試吧!
- 將腳本保存為 .sh 文件 (如 my_backup.sh)。
- 用 chmod +x my_backup.sh 賦予執行權限。
- 根據需要修改腳本里的路徑、閾值、郵箱、URL等參數。
- 直接運行 ./my_backup.sh 測試效果。
- 使用 cron (定時任務) 或 nohup (后臺運行) 實現自動化!
小貼士:
- 操作重要文件前,先在小范圍或測試環境驗證腳本!
- 善用 cron 定時任務 (crontab -e 編輯),讓腳本在指定時間自動運行。
- 遇到問題?echo 打印變量或使用 bash -x script.sh 調試是王道!
































