添加 install.sh
This commit is contained in:
commit
f37dbbe501
124
install.sh
Normal file
124
install.sh
Normal file
@ -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 "脚本执行完毕"
|
Loading…
Reference in New Issue
Block a user