本文目录导读:

- 针对 Linux (Debian/Ubuntu/RHEL/CentOS) 的 Shell 脚本
- 针对 macOS 的 Shell 脚本
- 针对 Node.js 项目 (自动处理 npm/yarn/pnpm)
- 针对 Python 项目 (自动创建 venv 并安装 requirements)
- 全能型一键安装脚本 (适合项目根目录)
- 脚本编写的最佳实践
检测当前环境 → 执行对应的包管理器命令 → 处理错误和权限。
以下我会提供几种常见场景的脚本模板,包括 Linux (apt/yum)、macOS (brew) 和 跨平台通用脚本 (Node.js/Python)。
针对 Linux (Debian/Ubuntu/RHEL/CentOS) 的 Shell 脚本
这个脚本会自动判断系统是 apt 系还是 yum 系,然后安装你指定的包。
示例脚本: install_deps.sh
#!/bin/bash
# 设置错误时退出
set -e
# 定义需要安装的包列表
APT_PACKAGES="git curl wget build-essential libssl-dev"
YUM_PACKAGES="git curl wget gcc gcc-c++ make openssl-devel"
echo "🔍 检测操作系统类型..."
# 检测包管理器
if command -v apt-get &> /dev/null; then
echo "📦 检测到 apt (Debian/Ubuntu)"
echo "更新包索引..."
sudo apt-get update -y
echo "安装依赖: $APT_PACKAGES"
sudo apt-get install -y $APT_PACKAGES
elif command -v yum &> /dev/null; then
echo "📦 检测到 yum (CentOS/RHEL 7)"
echo "安装依赖: $YUM_PACKAGES"
sudo yum install -y $YUM_PACKAGES
elif command -v dnf &> /dev/null; then
echo "📦 检测到 dnf (Fedora/RHEL 8+)"
echo "安装依赖: $YUM_PACKAGES"
sudo dnf install -y $YUM_PACKAGES
else
echo "❌ 错误: 未能识别的包管理器 (未找到 apt, yum 或 dnf)"
exit 1
fi
echo "✅ 所有系统级依赖安装完成!"
针对 macOS 的 Shell 脚本
macOS 通常使用 brew (Homebrew),如果没装,脚本可以自动安装 brew。
示例脚本: install_mac_deps.sh
#!/bin/bash
set -e
echo "🍎 检测 macOS 环境..."
# 检查是否安装了 Homebrew
if ! command -v brew &> /dev/null; then
echo "⚠️ 未检测到 Homebrew,正在安装 Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 根据你的 mac 架构(Intel/Apple Silicon)配置路径
if [[ $(uname -m) == "arm64" ]]; then
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
fi
fi
echo "更新 Homebrew..."
brew update
echo "安装常用依赖..."
brew install git curl wget cmake
# 如果你需要安装 Python 或 Node 等
# brew install python3 node
echo "✅ macOS 依赖安装完成!"
针对 Node.js 项目 (自动处理 npm/yarn/pnpm)
这个脚本用于安装 Node 项目的 node_modules,它会根据项目锁文件自动选择最快的包管理器。
示例脚本: install_node_deps.sh
#!/bin/bash
set -e
echo "📦 开始安装 Node.js 项目依赖..."
# 检查 Node 是否安装
if ! command -v node &> /dev/null; then
echo "❌ 错误: 未安装 Node.js,请先安装 Node.js"
exit 1
fi
# 自动检测包管理器
if [ -f "pnpm-lock.yaml" ]; then
echo "检测到 pnpm,使用 pnpm 安装..."
if ! command -v pnpm &> /dev/null; then
npm install -g pnpm
fi
pnpm install
elif [ -f "yarn.lock" ]; then
echo "检测到 yarn,使用 yarn 安装..."
if ! command -v yarn &> /dev/null; then
npm install -g yarn
fi
yarn install
elif [ -f "package-lock.json" ]; then
echo "检测到 npm,使用 npm 安装..."
npm install
else
echo "未检测到锁文件,默认使用 npm install..."
npm install
fi
echo "✅ Node.js 依赖安装完成!"
针对 Python 项目 (自动创建 venv 并安装 requirements)
示例脚本: install_python_deps.sh
#!/bin/bash
set -e
echo "🐍 开始安装 Python 项目依赖..."
# 检查 Python 版本
PYTHON_CMD="python3"
if ! command -v python3 &> /dev/null; then
if command -v python &> /dev/null; then
PYTHON_CMD="python"
else
echo "❌ 错误: 未找到 Python"
exit 1
fi
fi
echo "使用: $($PYTHON_CMD --version)"
# 创建虚拟环境
if [ ! -d "venv" ]; then
echo "创建虚拟环境..."
$PYTHON_CMD -m venv venv
fi
# 激活虚拟环境并安装
source venv/bin/activate
echo "激活虚拟环境: $(which python)"
# 升级 pip
pip install --upgrade pip
# 安装依赖
if [ -f "requirements.txt" ]; then
pip install -r requirements.txt
elif [ -f "Pipfile" ]; then
# 如果是 Pipenv 项目
pip install pipenv
pipenv install
else
echo "⚠️ 未找到 requirements.txt 或 Pipfile, 跳过安装"
fi
deactivate
echo "✅ Python 依赖安装完成!"
全能型一键安装脚本 (适合项目根目录)
这个脚本会尝试自动设置环境,并安装所有你知道的依赖(推荐放在项目根目录的 setup.sh 中)。
示例脚本: setup.sh
#!/bin/bash
set -e
echo "🚀 开始初始化项目环境..."
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$ROOT_DIR"
# 1. 安装系统级依赖 (调用上面的脚本)
echo "步骤 1/3: 安装系统依赖..."
bash install_deps.sh
# 2. 安装 Node 依赖 (如果有 package.json)
if [ -f "package.json" ]; then
echo "步骤 2/3: 安装 Node.js 依赖..."
bash install_node_deps.sh
fi
# 3. 安装 Python 依赖 (如果有 requirements.txt)
if [ -f "requirements.txt" ]; then
echo "步骤 3/3: 安装 Python 依赖..."
bash install_python_deps.sh
fi
echo "🎉 项目初始化完成!"
脚本编写的最佳实践
-
set -e: 放在脚本开头,一旦某行命令出错立即退出,避免“带病安装”。 -
set -x: (可加在调试时)打印每一条执行的命令,方便排查。 -
权限处理: 系统级安装(如
apt)通常需要sudo,而 Node/Python 用户级安装通常不需要。 -
重试机制: 对于网络不稳定的环境,可以增加重试逻辑。
function retry() { local n=1 local max=3 local delay=5 while true; do "$@" && break || { if [[ $n -lt $max ]]; then ((n++)) echo "⚠️ 命令失败,${delay}秒后重试 (${n}/${max})..." sleep $delay else echo "❌ 命令失败,已达最大重试次数" return 1 fi } done } # 使用方式 retry sudo apt-get install -y git -
环境检测: 总是先检测
command -v xxx或文件是否存在,避免执行不存在的命令。 -
错误信息:
exit 1退出前给出明确的错误提示。
你可以根据你的项目是 C++/Golang/Python/Node 还是 单纯的系统工具,从上面找一个最接近的模板改改即可。