install.sh 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #!/bin/bash
  2. # Author: Jrohy
  3. # Github: https://github.com/Jrohy/go-install
  4. # cancel centos alias
  5. [[ -f /etc/redhat-release ]] && unalias -a
  6. INSTALL_VERSION=""
  7. CAN_GOOGLE=1
  8. FORCE_MODE=0
  9. SUDO=""
  10. PROXY_URL="https://goproxy.cn"
  11. #######color code########
  12. RED="31m"
  13. GREEN="32m"
  14. YELLOW="33m"
  15. BLUE="36m"
  16. FUCHSIA="35m"
  17. colorEcho(){
  18. COLOR=$1
  19. echo -e "\033[${COLOR}${@:2}\033[0m"
  20. }
  21. #######get params#########
  22. while [[ $# > 0 ]];do
  23. KEY="$1"
  24. case $KEY in
  25. -v|--version)
  26. INSTALL_VERSION="$2"
  27. echo -e "准备安装$(colorEcho ${BLUE} $INSTALL_VERSION)版本golang..\n"
  28. shift
  29. ;;
  30. -f)
  31. FORCE_MODE=1
  32. echo -e "强制更新golang..\n"
  33. ;;
  34. *)
  35. # unknown option
  36. ;;
  37. esac
  38. shift # past argument or value
  39. done
  40. #############################
  41. ipIsConnect(){
  42. ping -c2 -i0.3 -W1 $1 &>/dev/null
  43. if [ $? -eq 0 ];then
  44. return 0
  45. else
  46. return 1
  47. fi
  48. }
  49. setupEnv(){
  50. if [[ $SUDO == "" ]];then
  51. PROFILE_PATH="/etc/profile"
  52. elif [[ -e ~/.zshrc ]];then
  53. PROFILE_PATH="~/.zprofile"
  54. fi
  55. if [[ $SUDO == "" && -z `echo $GOPATH` ]];then
  56. while :
  57. do
  58. read -p "默认GOPATH路径: `colorEcho $BLUE /home/go`, 回车直接使用或者输入自定义绝对路径: " GOPATH
  59. if [[ $GOPATH ]];then
  60. if [[ ${GOPATH:0:1} != "/" ]];then
  61. colorEcho $YELLOW "请输入绝对路径!"
  62. continue
  63. fi
  64. else
  65. GOPATH="/home/go"
  66. fi
  67. break
  68. done
  69. echo "GOPATH值为: `colorEcho $BLUE $GOPATH`"
  70. echo "export GOPATH=$GOPATH" >> $PROFILE_PATH
  71. echo 'export PATH=$PATH:$GOPATH/bin' >> $PROFILE_PATH
  72. mkdir -p $GOPATH
  73. fi
  74. if [[ -z `echo $PATH|grep /usr/local/go/bin` ]];then
  75. echo 'export PATH=$PATH:/usr/local/go/bin' >> $PROFILE_PATH
  76. fi
  77. source $PROFILE_PATH
  78. }
  79. checkNetwork(){
  80. ipIsConnect "golang.org"
  81. [[ ! $? -eq 0 ]] && CAN_GOOGLE=0
  82. }
  83. setupProxy(){
  84. if [[ $CAN_GOOGLE == 0 && `go env|grep proxy.golang.org` ]]; then
  85. go env -w GO111MODULE=on
  86. go env -w GOPROXY=$PROXY_URL,direct
  87. colorEcho $GREEN "当前网络环境为国内环境, 成功设置goproxy代理!"
  88. fi
  89. }
  90. sysArch(){
  91. ARCH=$(uname -m)
  92. if [[ `uname -s` == "Darwin" ]];then
  93. if [[ "$ARCH" == "arm64" ]];then
  94. VDIS="darwin-arm64"
  95. else
  96. VDIS="darwin-amd64"
  97. fi
  98. else
  99. if [[ "$ARCH" == "i686" ]] || [[ "$ARCH" == "i386" ]]; then
  100. VDIS="linux-386"
  101. elif [[ "$ARCH" == *"armv7"* ]] || [[ "$ARCH" == "armv6l" ]]; then
  102. VDIS="linux-armv6l"
  103. elif [[ "$ARCH" == *"armv8"* ]] || [[ "$ARCH" == "aarch64" ]]; then
  104. VDIS="linux-arm64"
  105. elif [[ "$ARCH" == *"s390x"* ]]; then
  106. VDIS="linux-s390x"
  107. elif [[ "$ARCH" == "ppc64le" ]]; then
  108. VDIS="linux-ppc64le"
  109. elif [[ "$ARCH" == "x86_64" ]]; then
  110. VDIS="linux-amd64"
  111. fi
  112. fi
  113. [ $(id -u) != "0" ] && SUDO="sudo"
  114. }
  115. installGo(){
  116. if [[ -z $INSTALL_VERSION ]];then
  117. echo "正在获取最新版golang..."
  118. if [[ $CAN_GOOGLE == 0 ]];then
  119. INSTALL_VERSION=`curl -s https://golang.google.cn/dl/|grep -w downloadBox|grep src|grep -oE '[0-9]+\.[0-9]+\.?[0-9]*'|head -n 1`
  120. else
  121. INSTALL_VERSION=`curl -s https://github.com/golang/go/tags|grep releases/tag|grep -v rc|grep -v beta|grep -oE '[0-9]+\.[0-9]+\.?[0-9]*'|head -n 1`
  122. fi
  123. [[ -z $INSTALL_VERSION ]] && { colorEcho $YELLOW "\n获取go版本号失败!"; exit 1; }
  124. echo "最新版golang: `colorEcho $BLUE $INSTALL_VERSION`"
  125. if [[ $FORCE_MODE == 0 && `command -v go` ]];then
  126. if [[ `go version|awk '{print $3}'|grep -Eo "[0-9.]+"` == $INSTALL_VERSION ]];then
  127. return
  128. fi
  129. fi
  130. fi
  131. FILE_NAME="go${INSTALL_VERSION}.$VDIS.tar.gz"
  132. local TEMP_PATH=`mktemp -d`
  133. curl -H 'Cache-Control: no-cache' -L https://dl.google.com/go/$FILE_NAME -o $FILE_NAME
  134. tar -C $TEMP_PATH -xzf $FILE_NAME
  135. if [[ $? != 0 ]];then
  136. colorEcho $YELLOW "\n解压失败! 正在重新下载..."
  137. rm -rf $FILE_NAME
  138. curl -H 'Cache-Control: no-cache' -L https://dl.google.com/go/$FILE_NAME -o $FILE_NAME
  139. tar -C $TEMP_PATH -xzf $FILE_NAME
  140. [[ $? != 0 ]] && { colorEcho $YELLOW "\n解压失败!"; rm -rf $TEMP_PATH $FILE_NAME; exit 1; }
  141. fi
  142. [[ -e /usr/local/go ]] && $SUDO rm -rf /usr/local/go
  143. $SUDO mv $TEMP_PATH/go /usr/local/
  144. rm -rf $TEMP_PATH $FILE_NAME
  145. if [[ ! -e /usr/local/bin/goupdate ]];then
  146. $SUDO echo "source <(curl -L https://go-install.netlify.app/install.sh)" > /usr/local/bin/goupdate
  147. $SUDO chmod +x /usr/local/bin/goupdate
  148. fi
  149. }
  150. main(){
  151. sysArch
  152. checkNetwork
  153. installGo
  154. setupEnv
  155. setupProxy
  156. echo -e "golang `colorEcho $BLUE $INSTALL_VERSION` 安装成功!"
  157. }
  158. main