installGo.sh

#!/bin/bash

# 检查是否以root用户运行
if [ "$(id -u)" -ne 0 ]; then
    echo "请使用root权限运行此脚本"
    exit 1
fi

# 检查是否安装了必要的工具
for cmd in curl wget tar; do
    if ! command -v $cmd &> /dev/null; then
        echo "错误: 需要安装 $cmd"
        exit 1
    fi
done

# 获取最新版本号
echo "正在获取最新Go版本..."
LATEST_VERSION=$(curl -s https://go.dev/dl/ | grep -o 'go[0-9.]\+\.linux-amd64.tar.gz' | head -1 | sed 's/go\([0-9.]\+\)\.linux-amd64.tar.gz/\1/')

if [ -z "$LATEST_VERSION" ]; then
    echo "无法获取最新版本信息"
    exit 1
fi

echo "最新版本是: $LATEST_VERSION"

# 创建临时目录
TMP_DIR=$(mktemp -d)
cd $TMP_DIR

# 带进度条的下载函数
download_with_progress() {
    echo "正在下载Go $LATEST_VERSION..."
    wget --progress=bar:force:noscroll -O go.tar.gz "https://go.dev/dl/go$LATEST_VERSION.linux-amd64.tar.gz"
    if [ $? -ne 0 ]; then
        echo "下载失败"
        cleanup
        exit 1
    fi
}

# 带进度条的解压函数
extract_with_progress() {
    echo "正在解压..."
    total_files=$(tar -tf go.tar.gz | wc -l)
    current=0
    
    tar -xzf go.tar.gz --checkpoint=.100 --checkpoint-action="exec=printf '\r已解压: %.1f%%' \$((100*$current/$total_files))" -C /usr/local
    
    # 确保显示100%
    echo -e "\r已解压: 100.0%"
}

# 清理函数
cleanup() {
    cd /
    rm -rf $TMP_DIR
}

# 陷阱,确保脚本中断时清理临时文件
trap cleanup EXIT

# 执行下载
download_with_progress

# 执行解压
echo "正在安装到 /usr/local/go..."
rm -rf /usr/local/go
extract_with_progress

# 配置环境变量
echo "正在配置环境变量..."
cat > /etc/profile.d/go.sh < export PATH=\$PATH:/usr/local/go/bin
export GOPATH=\$HOME/go
export PATH=\$PATH:\$GOPATH/bin
export GOPROXY=https://goproxy.cn,direct
export GOSUMDB=off
EOF

# 使环境变量生效
source /etc/profile.d/go.sh

# 验证安装
echo "正在验证安装..."
go version

if [ $? -ne 0 ]; then
    echo "Go安装失败"
    exit 1
fi

echo "Go $LATEST_VERSION 安装成功!"
echo "环境变量已配置,代理已设置为 https://goproxy.cn"
echo "请重新登录或执行 'source /etc/profile' 使环境变量生效"    

你可能感兴趣的:(installGo.sh)