go-install.sh 3.4 KB

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