From f37dbbe501a95664d81694a060fe03e924d1d77e Mon Sep 17 00:00:00 2001 From: mei Date: Sat, 3 May 2025 10:48:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20install.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 install.sh diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..331c37d --- /dev/null +++ b/install.sh @@ -0,0 +1,124 @@ +#!/bin/bash + +# 获取网页内容并显示实时下载信息 +echo "正在获取 Go 版本列表,请稍候..." +temp_file=$(mktemp --tmpdir go-version.XXXXXX) +wget -O $temp_file https://studygolang.com/dl + +# 从临时文件中解析版本列表 +versions=$(cat $temp_file | grep -oP 'go\d+\.\d+\.\d+' | sort -Vru) + +# 删除临时文件 +rm -f $temp_file + +# 输出所有版本的go列表 +echo "可用的go版本如下:" +select version in ${versions}; do + if [ -n "${version}" ]; then + break + else + echo "输入错误,请重新选择版本" + fi +done + +# 检测用户是否有在 /usr/local/go 目录中安装的权限 +if [ -w "/usr/local" ]; then + echo "您拥有在 /usr/local/go 目录中安装的权限,请确认是否安装在此位置." + read -p "(yes/no, 默认安装在此位置): " install_in_usr_local + + if [[ $install_in_usr_local =~ ^[Yy] ]]; then + # 使用 umask 设置默认目录和文件的权限 + umask 0022 + sudo mkdir -p /usr/local/go + fi +fi + +# 如果用户选择在 /usr/local/go 目录中安装,则安装在此位置,否则安装在 ~/go 目录中 +if [[ "$install_in_usr_local" == "y"* || "$install_in_usr_local" == "Y"* ]]; then + go_path="/usr/local/go" +else + echo "正在查找合适的安装路径, 请稍候..." + go_path=$(find ~/ -name "go" -type d -prune) + if [ -z "$go_path" ]; then + echo "无法找到合适的安装路径,请手动输入一个安装路径." + read -p "(默认为 ~/go): " go_path + go_path=${go_path:-~/go} + echo "已选择安装路径:$go_path" + fi +fi + +# 创建安装目录 +if [ ! -d "$go_path" ]; then + mkdir -p "$go_path" + echo "创建 $go_path 目录成功" +fi + +# 下载指定版本的go +if [ -f "$go_path/$version.linux-amd64.tar.gz" ]; then + echo "文件已存在,不需要下载" +else + if wget -P "$go_path" https://studygolang.com/dl/golang/$version.linux-amd64.tar.gz; then + echo "下载成功" + else + echo "下载失败" + exit 1 + fi +fi + +# 进入安装目录,执行rm和解压 +cd "$go_path" || exit +if rm -rf "$go_path/go" && tar -C "$go_path" -xzf "$go_path/$version.linux-amd64.tar.gz"; then + echo "解压成功" +else + echo "解压失败" + exit 1 +fi + +# 检测是否需要添加export语句 +if grep -q "export PATH=\$PATH:$go_path/go/bin" ~/.profile; then + echo "配置已存在,不需要添加" +else + if echo 'export PATH=$PATH:'"$go_path/go"'/bin' >> ~/.profile; then + echo "配置添加成功" + else + echo "配置添加失败" + exit 1 + fi +fi + +# 更新配置文件 +source ~/.profile + +# 执行go version检查是否安装成功 +if "$go_path/go/bin/go" version; then + echo "安装成功" +else + echo "安装失败" + exit 1 +fi + +# 配置 GOPROXY 环境变量 +read -p "请输入 GOPROXY 环境变量的值(默认值:https://goproxy.cn,direct): " goproxy +if [ -z "$goproxy" ]; then + echo "使用默认值 https://goproxy.cn,direct" + goproxy="https://goproxy.cn,direct" +fi +"$go_path/go/bin/go" env -w GOPROXY="$goproxy" + +# 询问用户是否开启 Go Modules 功能 +read -p "是否要开启 Go Modules 功能?(yes/no,默认开启)" use_module +case "$use_module" in + [nN][oO] | [nN]) + echo "已选择不开启 Go Modules 功能" + ;; + *) + "$go_path/go/bin/go" env -w GO111MODULE=on + echo "已开启 Go Modules 功能" + ;; +esac + +# 打印 goproxy 和 go module 相关信息 +echo "已经配置了 GOPROXY 环境变量为 $goproxy" +"$go_path/go/bin/go" env | grep -E "GOPROXY|GO111MODULE" + +echo "脚本执行完毕"