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
卸载后执行uninstall.sh即可。