📖 SUSE Linux Shell 腳本與自動化

分類:進階操作 | 作者:pake | 發布時間:2024-08-07 08:12

SUSE Linux Shell 腳本與自動化指南

在 SUSE Linux 系統管理中,Shell 腳本(Shell Script)是提高效率、自動化操作與批次處理的重要工具。本指南介紹在 SUSE 上撰寫 Shell 腳本的基礎概念、進階技巧,並提供多個自動化案例與排程方法。


目錄

  1. Shell 腳本基礎
  2. 變數與運算
  3. 條件判斷與迴圈
  4. 函數與模組化
  5. 自動化案例
  6. 排程與自動執行
  7. 日誌與報表
  8. 安全性與最佳實踐
  9. 結語

Shell 腳本基礎

建立與執行

# 建立腳本檔案
nano myscript.sh

# shebang
#!/usr/bin/env bash

echo "Hello, openSUSE!"

# 設定執行權限
chmod +x myscript.sh

# 執行
./myscript.sh

變數與運算

# 變數定義
NAME="SUSE Admin"
echo "Welcome, $NAME"

# 使用者輸入
read -p "Enter your name: " USER
echo "Hello, $USER"

# 數值運算
A=10
B=3
SUM=$((A + B))
echo "Sum = $SUM"

條件判斷與迴圈

if / else

read -p "Enter a number: " NUM
if (( NUM > 0 )); then
  echo "Positive"
else
  echo "Zero or Negative"
fi

case

read -p "Choice (start|stop|status): " CMD
case $CMD in
  start) echo "Starting service";;
  stop)  echo "Stopping service";;
  status) echo "Checking status";;
  *) echo "Invalid choice";;
esac

for / while

for i in {1..5}; do
  echo "Loop $i"
done

CNT=1
while (( CNT <= 5 )); do
  echo "Count $CNT"
  CNT=$((CNT+1))
done

函數與模組化

# 定義函數
log_info() {
  echo "[INFO] $(date '+%Y-%m-%d %H:%M:%S') $*"
}

# 調用
log_info "Starting backup..."

模組化腳本:

# utils.sh
#!/usr/bin/env bash
log_info() { echo "[INFO] $(date ...) $*"; }

# main.sh
#!/usr/bin/env bash
source ./utils.sh
log_info "Main script executing"

自動化案例

系統更新與清理

#!/usr/bin/env bash
log_info "Updating system..."
sudo zypper refresh
sudo zypper update -y
log_info "Auto-clean orphan packages..."
sudo zypper packages --unneeded | awk '/i/ {print $5}' | xargs sudo zypper remove -y

備份與歸檔

#!/usr/bin/env bash
DEST="/backup/$(date +%F)"
mkdir -p "$DEST"
log_info "Backing up /etc to $DEST"
tar czf "$DEST/etc-backup.tar.gz" /etc

監控並告警

#!/usr/bin/env bash
THRESHOLD=80
USAGE=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
if (( USAGE > THRESHOLD )); then
  echo "Disk usage $USAGE% exceeds $THRESHOLD%" | mail -s "Disk Alert" admin@example.com
fi

排程與自動執行

cron 與 cronie

安裝與啟動:

sudo zypper install cronie -y
sudo systemctl enable --now cron

編輯排程:

crontab -e
# 每日凌晨 2 點執行更新
0 2 * * * /path/to/update_script.sh

systemd 定時服務

建立 /etc/systemd/system/myscript.timer

[Unit]
Description=Run myscript daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

建立對應 .service

[Unit]
Description=My Script Service

[Service]
ExecStart=/usr/local/bin/myscript.sh

啟用:

sudo systemctl enable --now myscript.timer

日誌與報表


安全性與最佳實踐


結語

通過本指南的內容,您可在 SUSE Linux 上撰寫靈活且健壯的 Shell 腳本,並透過 cron 或 systemd 定時排程自動化各種系統管理任務,從而大幅提升運維效率與系統穩定度。

⬅ 上一篇 下一篇 ➡
🔙 返回 進階操作 📚 返回教學列表 🏠 返回首頁