您的位置:首页 > 运维架构 > Linux

centos7上JDK安装与一键安装脚本的编写

2017-02-25 21:19 246 查看

centos7上JDK安装与一键安装脚本的编写

一、环境准备

下载JDK的安装包JDK官方下载地址 ,选择linux 64位对应的tar包下载

二、安装步骤

  1. 解压下载好的JDK的tar包。由于JDK是绿色安装的,解压后就可以运行。我们需要做的就是将其放到指定目录(这里使用/usr/java 目录,你可以换成其他目录)后,设置好环境变量使得我们在任意目录下都可以执行java命令。

  2. 设置环境变量。一般强制的方法都是直接修改/etc/profile文件,在文件最后添加四行代码

export JAVA_HOME=/user/java/jdk1.8.0_101/
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin


之后执行“source /etc/profile “,执行java -version出现如下的java版本信息就说明安装已经成功。

[zeus@zeus Desktop]$ java -version

java version “1.8.0_101”

Java(TM) SE Runtime Environment (build 1.8.0_101-b13)

Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

三、一键安装脚本的编写

  关于设置环境变量的方法,网上大部分给出的方案是修改/etc/profile这个文件。但是这样太暴力,我个人不喜欢,同时卸载JDK后需要手动清理环境变量。因此,使用在/etc/profile.d目录下添加一个设置环境变量的脚本,系统每次启动会去加载这个目录下的文件。这样当我们不需要这个环境变量时,删掉这个脚本就可以了。

  有的时候,由于机器上已经安装过JDK或者其他原因,可能会导致安装的JDK无法使用,这时候我们需要做一些环境的清理工作并且设置环境变量。将这些步骤整理下,保存成一个脚本,就叫做JDK的安装脚本吧setup.sh

#!/bin/bash

basedir="/user/java"
datadir="/user/java/jdk1.8.0_101"
envfile="/etc/profile.d/JDK8-env.sh"

function jdk_config()
{
# printf ">>Install %-30s  ...\n" "JDK8"
if [ -d "${datadir}" ]; then
echo "export JAVA_HOME=/user/java/jdk1.8.0_101/" > ${envfile}
echo "export JRE_HOME=$JAVA_HOME/jre" >> ${envfile}
echo "export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH" >> ${envfile}
echo "export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin" >> ${envfile}

dos2unix -q ${envfile} 1>/dev/null 2>&1
chmod 755 ${envfile}
# 当前shell环境下java命令不生效
source ${envfile} 1>/dev/null 2>&1
if [ -f "/etc/bashrc" ]; then
cat /etc/bashrc |grep -q "^source /etc/profile.d/JDK8-env.sh"
if [ $? -ne 0 ]; then
echo "source /etc/profile.d/JDK8-env.sh" >> /etc/bashrc
fi
fi
# 防止当前shell环境下java命令不生效(保留)
if [ ! -f '/usr/sbin/jar' ]; then
ln -s /user/java/jdk1.8.0_101/bin/jar /usr/sbin/jar
fi
if [ ! -f '/usr/sbin/java' ]; then
ln -s /user/java/jdk1.8.0_101/bin/java /usr/sbin/java
fi
if [ ! -f '/usr/sbin/javac' ]; then
ln -s /user/java/jdk1.8.0_101/bin/javac /usr/sbin/javac
fi
if [ ! -f '/usr/sbin/javah' ]; then
ln -s /user/java/jdk1.8.0_101/bin/javah /usr/sbin/javah
fi
printf ">>install %-30s [\033[32m OK \033[0m]\n" "jdk config" 1>/dev/null 2>&1
else
echo "Error, cannot find ${datadir}!!"
printf ">>install %-30s [\033[31m Fail \033[0m]\n" "jdk config"
exit 1
fi
printf ">>Install %-30s [\033[32m OK \033[0m]\n" "JDK8"
}

# Need uninstall other jdk service
function jdk_clean()
{
# 强制kill java进程
ps -eo cmd,pid | grep '^java' |grep -v 'grep' 1>/dev/null 2>&1
if [ $? -eq 0 ]; then
kill -9 `ps -eo cmd,pid | grep '^java' |grep -v 'grep' | awk '{print $NF}'`
fi
ps auxf | grep 'bin/java' | grep -v 'grep' 1>/dev/null 2>&1
if [ $? -eq 0 ]; then
kill -9 `ps auxf | grep 'bin/java' | grep -v 'grep' | awk '{print $2}'`
fi

# 删除java工具
for line in `whereis -b java javac jar javah | awk -F':' '{print $2}'`
do
if [[ "$line" == /user/* ]]; then
continue
fi
ls -al ${line} 2>/dev/null |grep -q "/user/" 1>/dev/null 2>&1
if [ $? -eq 0 ]; then
continue
fi
mv ${line} ${line}_bak                     1>/dev/null 2>&1
done
}

################# MAIN BODY #####################
jdk_clean
jdk_config


我们都知道JDK不用时直接把解压出的目录删除就可以了,但是环境变量等还依旧存在。这时候,我们需要删除添加的脚本并且将链接文件等清除。这时候需要一个卸载脚本uninstall.sh

#!/bin/bash

# uninstall
function jdk_uninstall()
{
# remove service
rm -f /etc/profile.d/JDK8-env.sh 1>/dev/null 2>&1
sed -i '/JDK8-env.sh/d' /etc/bashrc

# 强制kill java进程
ps -eo cmd,pid | grep '^java' |grep -v 'grep' 1>/dev/null 2>&1
if [ $? -eq 0 ]; then
kill -9 `ps -eo cmd,pid | grep '^java' |grep -v 'grep' | awk '{print $NF}'`
fi
ps auxf | grep 'bin/java' | grep -v 'grep' 1>/dev/null 2>&1
if [ $? -eq 0 ]; then
kill -9 `ps auxf | grep 'bin/java' | grep -v 'grep' | awk '{print $2}'`
fi

# link file
ls -al /usr/sbin/jar | grep -q '/user/java/jdk1.8.0_101/bin/jar' 1>/dev/null 2>&1
if [ $? -eq 0 ]; then
rm -f /usr/sbin/jar
fi
ls -al /usr/sbin/java | grep -q '/user/java/jdk1.8.0_101/bin/java' 1>/dev/null 2>&1
if [ $? -eq 0 ]; then
rm -f /usr/sbin/java
fi
ls -al /usr/sbin/javac | grep -q '/user/java/jdk1.8.0_101/bin/javac' 1>/dev/null 2>&1
if [ $? -eq 0 ]; then
rm -f /usr/sbin/javac
fi
ls -al /usr/sbin/javah | grep -q '/user/java/jdk1.8.0_101/bin/javah' 1>/dev/null 2>&1
if [ $? -eq 0 ]; then
rm -f /usr/sbin/javah
fi

# remove data
rm -rf /user/java              1>/dev/null 2>&1

printf ">>Uninstall %-28s [\033[32m OK \033[0m]\n" "JDK8"
}

################# MAIN BODY #####################
jdk_uninstall


其实这两个脚本可以合并成一个,但是我懒得改了。将这两个脚本放置在解压后的JDK目录中,安装时执行 sh setup.sh

卸载后执行uninst
98d1
all.sh即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  centos java