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交互式输入或从加密配置文件读取: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(提升并发处理能力)、优化代码(减少冗余查询、合理使用数据类型)。