Shell脚本自动化部署需兼顾稳定性、安全性和可维护性:先校验root权限与系统类型,再精准安装依赖;下载前预检URL、下载后校验SHA256;解压前清理旧目录;configure指定用户/路径/模块,make -j加速编译;安装后语法验证,再配置标准systemd服务并启用。

直接写一个能跑通的 Shell 脚本不难,关键是要让它在不同环境里稳定、安全、可维护。核心思路是把人工操作的每一步——检查权限、装依赖、拉源码、校验完整性、配置编译参数、安装、建用户、配服务、启服务——都封装成带判断和错误反馈的逻辑块。
权限与系统识别必须前置
脚本第一件事就是确认 root 权限,并识别发行版类型,因为依赖包名和 systemd 路径可能不同:
- 用 id -u 判断是否为 root,非 root 直接退出并提示
- 通过 /etc/os-release 读取
ID和VERSION_ID,区分 CentOS/RHEL(yum/dnf)和 Ubuntu/Debian(apt) - 提前检测
wget、tar、make、gcc、lscpu是否可用,缺一不可就报错退出
依赖安装要按系统精准适配
不能统一用 yum 或 apt,得根据识别结果执行对应命令:
- RHEL/CentOS 系:安装
gcc gcc-c++ make pcre-devel zlib-devel openssl-devel perl-ExtUtils-Embed - Ubuntu/Debian 系:安装
build-essential libpcre3-dev libssl-dev zlib1g-dev - 安装后验证
gcc --version和make --version是否正常输出
下载与校验必须可靠可控
版本号、URL、校验值不能硬编码进脚本主体,应设为变量并支持外部传参:
- 定义
NGINX_VERSION="1.26.2"和NGINX_URL="https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz" - 用
wget -q --spider ${NGINX_URL}预检链接有效性,失败则提示官网可能变更 - 下载后同步获取官方
SHA256SUMS文件,用sha256sum -c校验源码包,不通过则自动清理并退出 - 解压前检查目标目录是否存在,存在则先清空,避免旧文件干扰编译
编译安装和服务注册需兼顾安全与标准
configure 参数要精简实用,服务文件要符合 systemd 规范:
- 运行用户设为
--user=nginx --group=nginx,安装路径统一为--prefix=/usr/local/nginx - 启用必要模块:
--with-http_ssl_module、--with-http_v2_module、--with-http_stub_status_module、--with-stream - 用
lscpu | awk '/^CPU\(s\)/{print $2}'获取核心数,设置make -j$(nproc)加速编译 - 安装后立即执行
/usr/local/nginx/sbin/nginx -t验证配置语法;失败则中止后续步骤 - 为 systemd 创建
/lib/systemd/system/nginx.service,含Type=forking、PIDFile、ExecStartPre(预检配置)、Restart=always - 启用并启动服务:
systemctl daemon-reload && systemctl enable nginx && systemctl start nginx











