install.sh 4.4 KB

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