自动检测并安装/更新 btop

又是一个奇葩需求引发的奇葩脚本,btop 够炫但系统内核太老且不能升级,apt库里找不到,手动安装更新太繁琐,嗯…… 没事,咱有脚本:
#!/bin/bash
# 文件名:btop_manager.sh
# 功能:自动检测并安装/更新 btop
set -e
echo "========================================"
echo " btop 管理脚本"
echo "========================================"
# 检查 btop 是否已安装
BTOP_INSTALLED=false
CURRENT_VERSION="未安装"
if command -v btop &> /dev/null; then
BTOP_INSTALLED=true
CURRENT_VERSION=$(btop --version 2>&1 | grep -oP '\d+\.\d+\.\d+' | head -n 1 || echo "unknown")
echo "📦 检测到已安装: $CURRENT_VERSION"
else
echo "📦 未检测到 btop"
fi
echo ""
echo "🌐 选择下载方式:"
echo " 1) 直连 GitHub(国外服务器/有魔法)"
echo " 2) ghproxy.com 镜像加速"
echo " 3) mirror.ghproxy.com 镜像"
echo " 4) ghproxy.net 镜像"
echo " 5) 自定义代理地址"
echo ""
read -p "请选择 [1-5, 默认1]: " PROXY_CHOICE
PROXY_CHOICE=${PROXY_CHOICE:-1}
case $PROXY_CHOICE in
1)
GITHUB_PROXY=""
echo "✅ 使用直连模式"
;;
2)
GITHUB_PROXY="https://ghproxy.com/"
echo "✅ 使用 ghproxy.com 加速"
;;
3)
GITHUB_PROXY="https://mirror.ghproxy.com/"
echo "✅ 使用 mirror.ghproxy.com 加速"
;;
4)
GITHUB_PROXY="https://ghproxy.net/"
echo "✅ 使用 ghproxy.net 加速"
;;
5)
read -p "请输入代理域名(如 ghproxy.com): " CUSTOM_PROXY
if [ -n "$CUSTOM_PROXY" ]; then
GITHUB_PROXY="https://${CUSTOM_PROXY}/"
echo "✅ 使用自定义代理: $GITHUB_PROXY"
else
echo "❌ 未输入代理地址,使用直连"
GITHUB_PROXY=""
fi
;;
*)
echo "❌ 无效选择,使用直连模式"
GITHUB_PROXY=""
;;
esac
# 获取最新版本号
echo ""
echo "📡 检查最新版本..."
API_URL="${GITHUB_PROXY}https://api.github.com/repos/aristocratos/btop/releases/latest"
LATEST_VERSION=$(curl -s --connect-timeout 10 --max-time 20 "$API_URL" | grep -oP '"tag_name": "v\K[0-9.]+')
if [ -z "$LATEST_VERSION" ]; then
echo "❌ 获取版本信息失败"
echo "💡 提示: 可能是网络问题,建议重试并选择镜像加速"
exit 1
fi
echo "最新版本: $LATEST_VERSION"
# 判断是安装还是更新
if [ "$BTOP_INSTALLED" = false ]; then
# === 安装逻辑 ===
echo ""
echo "🆕 准备安装 btop $LATEST_VERSION"
read -p "是否继续?[y/N] " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "取消安装"
exit 0
fi
ACTION="安装"
else
# === 更新逻辑 ===
if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
echo ""
echo "✅ 已是最新版本,无需更新"
read -p "是否重新安装?[y/N] " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 0
fi
ACTION="重新安装"
else
echo ""
echo "🔄 发现新版本: $CURRENT_VERSION → $LATEST_VERSION"
read -p "是否更新?[y/N] " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "取消更新"
exit 0
fi
ACTION="更新"
fi
fi
# 开始下载和安装
echo ""
echo "📥 下载最新版本..."
cd /tmp
DOWNLOAD_URL="${GITHUB_PROXY}https://github.com/aristocratos/btop/releases/latest/download/btop-x86_64-linux-musl.tbz"
if ! wget -q --show-progress --connect-timeout 10 --timeout=300 "$DOWNLOAD_URL"; then
echo ""
echo "❌ 下载失败"
echo "💡 提示: 可以重新运行脚本并选择其他镜像源"
exit 1
fi
echo "📂 解压..."
tar -xjf btop-x86_64-linux-musl.tbz
if [ "$BTOP_INSTALLED" = true ]; then
echo "🗑️ 删除旧版本..."
sudo rm -f /usr/local/bin/btop
sudo rm -rf /usr/local/share/btop
fi
echo "📥 ${ACTION}中..."
cd btop
sudo make install
echo "🧹 清理..."
cd /tmp
rm -rf btop btop-x86_64-linux-musl.tbz
echo ""
echo "========================================"
echo "✅ ${ACTION}完成!"
btop --version | head -n 1
echo ""
echo "💡 使用方法: 直接运行 btop 命令"
echo "========================================"
使用方法:
#上面脚本找个喜欢的地方存一下
nano btop_manager.sh
# 添加执行权限
chmod +x btop_manager.sh
# 想起来了运行一下
./btop_manager.sh
# 里面的镜像失效了自己替换一下……