软件开发

Linux一键安装多版本JDK脚本

Linux安装JDK脚本,本脚本的最大优势是可以任意指定安装版本和路径,并且可以多版本同时安装使用,一键切换。
#!/bin/sh

#******************************************************************************
#   文件名:installJDK_Offline.sh
#     作者: 李成彬
#     网站:www.climbing.top
#     版本: 1.0
# 创建时间:2017/10/10
# 修改时间: 2017/10/10
# 测试时间: 2017/10/10 12:00
#     用途:该脚本用于安装JDK。
# 使用方法:sh installJDK_Offline.sh jdkInstallationPackageName 或sh installJDK_Offline.sh jdkInstallationPackageName jdkDirectoryPath
# 版本切换:alternatives --install <link> <name> <path> <priority>
#                    [--initscript <service>]
#                    [--slave <link> <name> <path>]*
#           alternatives --remove <name> <path>
#           alternatives --auto <name>
#           alternatives --config <name>
#           alternatives --display <name>
#           alternatives --set <name> <path>   
#******************************************************************************
 
#判断当前是否是root用户
if [ $USER != "root" ]; then
    echo "Please run as root"
    exit;
fi
 
#判断输入参数是否正确
if [ $# != 1 ]&&[ $# != 2 ]; then
    echo "Usage:sh /installJDK_Offline.sh jdkInstallationPackageName"
echo "or"
echo "Usage:sh /installJDK_Offline.sh jdkInstallationPackageName jdkDirectoryPath"
echo "Introduction:jdkDirectoryPath default value /usr/local/java"
    exit
else
jdkInstallationPackageName=$1
#定义安装目录
    #当变量$2为null或为空字符串时则jdkDirectoryPath=/usr/local/java  
    jdkDirectoryPath=${2:-"/usr/local/java"}  
    #echo $jdkDirectoryPath
fi
 
#时间
TIME=`date +"%Y%m%d%H%M%S"`
 
#当前目录,获取执行脚本的全路径
BASEDIR=$(cd "$(dirname "$0")"; pwd)
    #   dirname 该命令的作用是从路径中提取出目录名,使用方法为 dirname NAME
#   basename #该命令的作用是从路径中提取出文件名,使用方法为basename NAME [SUFFIX]。
 
# echo ${BASEDIR##*/}
    #   #:表示从左边算起第一个
    #   %:表示从右边算起第一个
    #   ##:表示从左边算起最后一个
    #   %%:表示从右边算起最后一个
    #   *:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。
 
#获取root路径
ROOTHOME=`cat /etc/passwd|grep "^root:"|awk 'BEGIN { FS=":"} { print $6 }'`
 
#用户的环境变量文件
USERPROFILE=".bash_profile"
 
#获取安装包一级目录名
jdkDirectoryName=`tar -tf "$BASEDIR/$1" |awk -F "/" '{print $1}'|sort | uniq`
#`tar -tf "$BASEDIR/$1" |awk -F "/" '{print $1}'|tail -n 1`
#`tar -tf "$BASEDIR/$1" |awk -F "/" '{print $1}'|sed -n '1p'`
#echo $jdkDirectoryName
 
#修改JAVA_HOME和PATH环境变量
javaHome='$JAVA_HOME'
javaPath=$jdkDirectoryPath"/"$jdkDirectoryName
#echo $javaHome
holdSysPath=$PATH:$javaHome"/"bin
sysPath=$holdSysPath
classPath=.:$javaHome"/"lib
jreHome=$javaHome"/"jre
binPath="/usr/bin"
#==========================================================================
 
if [ ! -d "$jdkDirectoryPath" ]; then
  mkdir "$jdkDirectoryPath"     
fi
 
cd $BASEDIR  
  echo ================www.climbing.top================
  #extract jdk
  tar -zxf $BASEDIR/$jdkInstallationPackageName -C $jdkDirectoryPath
  chmod -R 777 $jdkDirectoryPath
#set environment
cd $ROOTHOME
 
if  [ ! "`grep "JAVA_HOME=$binPath/JAVA_HOME" $USERPROFILE`" ];then
    echo ==============Update environment================ 
#复制文件
    /bin/cp $USERPROFILE $USERPROFILE+$TIME
echo Backup $USERPROFILE TO $USERPROFILE+$TIME
    echo "export JAVA_HOME=$binPath/JAVA_HOME" | sudo tee -a $USERPROFILE 
    echo "export JRE_HOME=$jreHome" | sudo tee -a $USERPROFILE
    echo "export PATH=$sysPath" | sudo tee -a $USERPROFILE     
    echo "export CLASSPATH=$classPath" | sudo tee -a $USERPROFILE
    isReLogin=true
else
isReLogin=false
fi
 
#update environment
source $ROOTHOME/$USERPROFILE  
 
alternatives --install $binPath/JAVA_HOME  JAVA_HOME $javaPath 1
alternatives --config JAVA_HOME
 
 
#路径版本
VERSION_PATH=`echo $javaPath|awk 'BEGIN { FS="jdk"} { print $2 }'`
#命令版本
VERSION_COMMAND=`java -version 2>&1 | awk 'NR==1{gsub(/"/,"");print $3}'`
if [ "$VERSION_PATH" == "$VERSION_COMMAND" ]; then
  #echo $VERSION_PATH eq $VERSION_COMMAND
  echo "===============JDK is installed !================"
  java -version
  else  
  #echo $VERSION_PATH not eq $VERSION_COMMAND
  echo "============JDK is not installed !==============="
fi
 
#重新登陆使环境变量生效
if [ $isReLogin == true ]; then 
echo "===========First install must re-login==========="
read isReLogin
kill -9 `ps --no-heading | head -n 1 | awk '{print $1}'`
fi
 


滚动链接
辽ICP备14009778号

To Top