Shell 腳本編程:七個提高效率的自動化腳本
作者:西岸Alex
本文將介紹七個實用Shell腳本,涵蓋文件管理、系統監控、數據處理等常見場景,適合初學者學習參考。
Shell腳本是Linux系統管理和自動化任務的強大工具。通過編寫腳本,我們可以將重復性工作自動化,大幅提升效率。
本文將介紹七個實用Shell腳本,涵蓋文件管理、系統監控、數據處理等常見場景,適合初學者學習參考。

1. 自動備份重要文件
場景:定期備份/home/user/documents目錄到/backup,并壓縮存檔。
#!/bin/bash
# 定義源目錄和目標目錄
SOURCE_DIR="/home/user/documents"
BACKUP_DIR="/backup"
DATE=$(date +%Y-%m-%d)
# 創建備份文件(帶日期)
tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" "$SOURCE_DIR"
# 輸出成功信息
echo "Backup completed: $BACKUP_DIR/backup_$DATE.tar.gz"說明:
- tar -czf:壓縮目錄為.tar.gz文件。
- date +%Y-%m-%d:獲取當前日期,用于文件名。
2. 監控磁盤空間并發送警報
場景:當磁盤使用率超過90%時發送郵件報警。
#!/bin/bash
THRESHOLD=90
CURRENT=$(df / | grep / | awk '{print $5}' | sed 's/%//g')
if [ "$CURRENT" -gt "$THRESHOLD" ]; then
echo "Disk usage is $CURRENT% on $(hostname)" | mail -s "Disk Alert" admin@example.com
fi說明:
- df /:獲取根分區磁盤使用率。
- mail:發送郵件(需配置郵件服務)。
3. 自動清理舊日志文件
場景:刪除/var/log下超過30天的日志文件。
#!/bin/bash
find /var/log -type f -name "*.log" -mtime +30 -exec rm {} \;說明:
- find -mtime +30:匹配修改時間超過30天的文件。
- -exec rm {} \;:對找到的文件執行刪除操作。
4. 檢查服務器存活狀態
場景:檢測一組服務器是否在線。
#!/bin/bash
SERVERS=("192.168.1.1" "192.168.1.2" "example.com")
for server in "${SERVERS[@]}"; do
ping -c 1 "$server" &> /dev/null && echo "$server is UP" || echo "$server is DOWN"
done說明:
- ping -c 1:發送1次ICMP請求。
- &> /dev/null:忽略輸出,僅顯示結果。
5. 密碼生成器
場景:生成隨機密碼(含大小寫字母、數字、符號)。
#!/bin/bash
LENGTH=12
PASSWORD=$(tr -dc 'A-Za-z0-9!@#$%^&*' < /dev/urandom | head -c "$LENGTH")
echo "Generated Password: $PASSWORD"說明:
- /dev/urandom:Linux隨機數設備。
- tr -dc:過濾指定字符集。
6. 實時監控DNS解析狀態
場景:持續檢查域名是否能正常解析,失敗時記錄日志。
#!/bin/bash
domain="example.com"
log_file="dns.log"
while true; do
result=$(dig +short $domain)
[ -z "$result" ] && echo "$(date): DNS failed" >> $log_file
sleep 1
done說明:
- dig +short:快速獲取DNS解析結果。
- 空結果時記錄日志,適合監控關鍵域名可用性。
7. HTTP服務監控腳本
場景:持續檢測網站可用性,記錄訪問狀態碼
#!/bin/bash
url="http://example.com"
log_file="http_test.log"
while true; do
http_result=$(curl -s -o /dev/null -w "%{http_code}" $url)
if [ $http_result -eq 200 ]; then
echo "$(date): HTTP request to $url succeeded (Status: $http_result)" >> $log_file
else
echo "$(date): HTTP request to $url failed (Status: $http_result)" >> $log_file
fi
sleep 1
done說明:
- curl -w "%{http_code}":獲取HTTP狀態碼
- 狀態碼200時記錄成功,其他狀態記錄失敗
責任編輯:趙寧寧
來源:
DevOps運維實戰
























