自动检测并安装/更新 btop

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

# 里面的镜像失效了自己替换一下……

本文链接:

https://blog.coffox.cc/archives/39/
1 + 9 =
快来做第一个评论的人吧~