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

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

































