有点 Shell 基础,而且经常安装 Golang 的环境,为了方便自己,就写了个一键安装 golang 的环境教程,之前写过一次,但是不够智能,现在添加了几个功能。

1、可以自定义 Golang 版本号;
2、自动判断系统的相关信息(如32位or64位系统)及下载对应的地址

MY_DIY_GO_VERSION 为自定义的 golang 版本号,如:1.6.2

###第一种方式: 直接通过我写好的脚本一键安装(一键安装)。

截止发文时,Go 版本号为:1.7rc3   
### Ubuntu/CentOS:    

> 脚本默认版本号     
Wget方式:wget -qO- https://down.zzzzy.com/shell.install.go | sh     
Curl方式:curl -SL https://down.zzzzy.com/shell.install.go | sh  

> 自定义版本号      
Wget方式:wget -qO- https://down.zzzzy.com/shell.install.go | bash /dev/stdin MY_DIY_GO_VERSION    
Curl方式:curl -SL https://down.zzzzy.com/shell.install.go | bash /dev/stdin MY_DIY_GO_VERSION
https://down.zzzzy.com/shell.install.go?abc

###第二种方式:
将下面的代码复制到Linux服务器下任意一个目录,并将文件名改成 "xxx.sh",再执行 sh xxx.sh MY_DIY_GO_VERSION

#!/bin/bash
# Author:  Skiychan <dev@skiy.net>
# Link:  https://www.skiy.net
#
#
# Project home page:
#       https://github.com/skiy

# Set Golang Version
go_version="1.7rc3"

# DIY version
if [ -n "$1" ] ;then
go_version=$1
fi

# Printf Version Info
clear
printf "
#########################################
#      Author  Skiychan<dev@skiy.net>   #
#      Link    http://www.skiy.net      #
#########################################
"

# Check if user is root
[ $(id -u) != "0" ] && { echo "${CFAILURE}Error: You must be root to run this script${CEND}"; exit 1; } 

echo=echo
for cmd in echo /bin/echo; do
	$cmd >/dev/null 2>&1 || continue
	if ! $cmd -e "" | grep -qE '^-e'; then
		echo=$cmd
		break
	fi
done

# Set Color
CSI=$($echo -e "33[")
CEND="${CSI}0m"
CDGREEN="${CSI}32m"
CRED="${CSI}1;31m"
CGREEN="${CSI}1;32m"
CYELLOW="${CSI}1;33m"
CBLUE="${CSI}1;34m"
CMAGENTA="${CSI}1;35m"
CCYAN="${CSI}1;36m"
CSUCCESS="$CDGREEN"
CFAILURE="$CRED"
CQUESTION="$CMAGENTA"
CWARNING="$CYELLOW"
CMSG="$CCYAN"

#Check Linux Version
if [ -f /etc/redhat-release -o -n "`grep 'Aliyun Linux release' /etc/issue`" ];then
    OS=CentOS
    [ -n "`grep ' 7.' /etc/redhat-release`" ] && CentOS_RHEL_version=7
    [ -n "`grep ' 6.' /etc/redhat-release`" -o -n "`grep 'Aliyun Linux release6 15' /etc/issue`" ] && CentOS_RHEL_version=6
    [ -n "`grep ' 5.' /etc/redhat-release`" -o -n "`grep 'Aliyun Linux release5' /etc/issue`" ] && CentOS_RHEL_version=5
elif [ -n "`grep bian /etc/issue`" ];then
    OS=Debian
    Debian_version=`lsb_release -sr | awk -F. '{print $1}'`
elif [ -n "`grep Ubuntu /etc/issue`" ];then
    OS=Ubuntu
    Ubuntu_version=`lsb_release -sr | awk -F. '{print $1}'`
else
    echo "${CFAILURE}Does not support this OS, Please contact the author! ${CEND}"
    kill -9 $$
fi

# Check Linux Bit
if [ $(getconf WORD_BIT) = '32' ] && [ $(getconf LONG_BIT) = '64' ] ; then
    sys_bit="amd64"
else
    sys_bit="386"
fi

printf "
#########################################
#       System:   %s                #
#       Bit:      %s                 #
#       Golang %s Install            #
#########################################

" $OS $sys_bit $go_version

# Install Curl Lib for Linux
if [ $OS = 'CentOS' ];then
    yum update -y
    yum install -y curl
else
    apt-get update -y
    apt-get install -y curl
fi
    
# Download Golang Package, Then Unzip to /usr/local    
GO_DOWNLOAD=https://storage.googleapis.com/golang/go$go_version.linux-$sys_bit.tar.gz

printf "
download url: %s

" $GO_DOWNLOAD

rm go.tar.gz -rf
curl --retry 10 --retry-delay 60 --retry-max-time 60 -C - -SL -o go.tar.gz $GO_DOWNLOAD && 
#curl -SL -o go.tar.gz http://golangtc.com/static/go/go$go_version/$go_version.linux-amd64.tar.gz && 
    tar -C  /usr/local/ -zxf go.tar.gz && 
    rm go.tar.gz -rf

# Create GOPATH
mkdir -p /data/go

# Set ENV for Golang
cat <<EOF >> /etc/profile
export GOROOT=/usr/local/go
export GOPATH=/data/go
export PATH=$GOROOT/bin:$PATH
EOF

# Make Env Is Enable
source /etc/profile
go env
go version

# Printf Tip
printf "
##############################################
#  安装成功,请再次执行 source /etc/profile  #
##############################################
"
source /etc/profile