Linux LAMP腳本編寫技巧:提升效率與可維護性
腳本開頭需指定解釋器(如#!/bin/bash
,優先于#!/bin/sh
以利用Bash的高級功能),并添加清晰的注釋說明腳本功能、作者、創建日期及用法。例如:
#!/bin/bash
# 功能:自動化部署LAMP環境(Apache+MySQL+PHP)
# 作者:Your Name
# 日期:2025-10-01
# 用法:./deploy_lamp.sh
變量定義應使用有意義的名稱(如MYSQL_ROOT_PASSWORD
而非pwd
),并避免硬編碼敏感信息(可通過環境變量或配置文件讀?。?。
將重復操作(如安裝依賴、啟動服務)封裝為函數,提高代碼復用性。例如:
# 安裝常用依賴包
install_dependencies() {
local packages=("wget" "mariadb" "mariadb-server" "php" "php-mysql" "php-gd")
yum clean all && yum repolist && yum -y install "${packages[@]}" || {
echo "依賴安裝失??!"
exit 1
}
}
# 啟動服務并檢查狀態
start_service() {
local service_name=$1
if systemctl is-active --quiet "$service_name"; then
echo "$service_name 已運行"
else
systemctl start "$service_name" && echo "$service_name 啟動成功" || {
echo "$service_name 啟動失??!"
exit 1
}
fi
}
通過函數調用簡化主流程:install_dependencies
、start_service "apache2"
、start_service "mysql"
。
set -e
讓腳本在遇到錯誤時立即退出,避免繼續執行導致更嚴重的問題;trap
命令捕獲錯誤并執行清理操作(如刪除臨時文件):trap 'echo "腳本出錯,執行清理..."; rm -rf /tmp/lamp_temp; exit 1' ERR
if [[ "$(id -u)" != "0" ]]; then
echo "錯誤:需root權限運行!"
exit 1
fi
```。
將腳本執行過程記錄到日志文件,便于后續排查問題。例如:
LOG_FILE="/var/log/lamp_deploy.log"
exec > >(tee -a "$LOG_FILE") 2>&1 # 將標準輸出和錯誤輸出重定向到日志文件
echo "[$(date)] 開始部署LAMP環境..."
日志內容應包含時間戳、操作步驟及結果(如“安裝依賴包完成”“Apache啟動成功”)。
$(command)
替代反引號`command`
,[[ ]]
替代[ ]
進行條件判斷);awk
、sed
替代grep
+wc
組合(如awk '/pattern/{count++} END{print count}' file
統計匹配行數);for file in $(ls)
(可能因文件名含空格出錯):files=("/path/to/file1" "/path/to/file2")
for file in "${files[@]}"; do
echo "處理文件:$file"
done
$((expression))
替代expr
(如result=$((3+5))
)。[[ "$input" =~ ^[0-9]+$ ]]
確保輸入為數字);read -s
交互式輸入或從加密配置文件讀?。?pre class="hljs">read -s -p "請輸入MySQL root密碼:" MYSQL_ROOT_PASSWORD
echo # 換行
a2dismod
禁用不必要的模塊)、啟用mod_deflate
壓縮(減少傳輸體積)、調整MaxClients
參數(提升并發能力);my.cnf
配置(如innodb_buffer_pool_size
設置為物理內存的70%~80%)、定期執行OPTIMIZE TABLE
(整理碎片);OPcache
(緩存字節碼,減少編譯開銷)、使用PHP-FPM
替代mod_php
(提升并發處理能力)、優化代碼(減少冗余查詢、合理使用數據類型)。