Linux一键安装JDK(脚本可执行)

Linux base shell 脚本案例 安装JDK(脚本可执行)

系统环境

Linux服务器,作者使用centos7操作系统,支持裸机安装JDK或者没有安装过JDK的用户安装JDK。

运行说明

  1. 拥有root用户使用权

  2. 将安装脚本和JDK安装包(tar.gz包)拷贝至服务器上。

  3. 通过root用户 执行脚本,例如:sh installJDK.sh gudong /opt/software

    脚本执行参数说明:

    1. 第一个参数是需要安装jdk的用户。–必填项
    2. 第二个参数是JDK安装包所在的目录(绝对地址)。–必填项
  4. 脚本提示安装成功之后,即可验证使用。安装详情,可在日志文件installJDK_log_${yyyy_mm_dd}.log中找到。文件在脚本同级目录。

脚本分析

#!/bin/bash
# Author      : Donny
# History     :
# 2022/08/24    Version1   安装JDK(tar.gz)
# Program     : 在Centos7中实现JDK tar.gz的安装,仅仅支持裸机安装JDK,使用root用户执行脚本
#               root用户安装路径:/root/software
#               非root用户安装路径:/home/${jdkUser}/software
#####################################################################################

# Incoming parameter area
# 安装jdk的用户
jdkUser=$1
# 安装包所在的地址路径(绝对路径)
sourcePath=$2

# Buildin function area
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 日志模块 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 初始化日志模块
function initLogModule() {
    # 初始化日志输出
    logPath=$(pwd)
    # 脚本日志目录
    LogFile="$logPath/installJDK_log_$(date +%F).log"

    # 创建日志文件
    if ! [ -f "${LogFile}" ]; then
        touch "$LogFile"
    fi

    echo "日志文件为: ${LogFile}"
}

# 输出红色高亮字体并标记ERROR
function echo_error() {
    echo -e "\033[1;31m$1\033[0m"
    [ -n "${LogFile}" ] && echo "$(date +%F\ %T,%N | cut -c1-23) [ERROR] $1" >>"${LogFile}"
}

# 输出默认字体并标记INFO
function echo_info() {
    echo -e "$1"
    [ -n "${LogFile}" ] && echo "$(date +%F\ %T,%N | cut -c1-23) [INFO ] $1" >>"${LogFile}"
}

# 输出绿色字体并标记INFO
function echo_green() {
    echo -e "\033[32m$1\033[0m"
    [ -n "${LogFile}" ] && echo "$(date +%F\ %T,%N | cut -c1-23) [INFO ] $1" >>"${LogFile}"
}
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 日志模块 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

# 验证执行环境
function vaildateEx() {

    current=$(whoami)
    # 0.用户检查
    if [[ "root" != "$current" ]]; then
        echo -e "\033[1;31m请使用root用户执行脚本!\033[0m"
        exit 1
    fi
    # 1.参数检查
    if [[ -z "${jdkUser}" || -z "${sourcePath}" ]]; then
        echo -e "\033[1;31m请输入正确参数:
	第一个参数为安装jdk的用户,
	第二个参数为安装包所在的地址路径(绝对路径).
    例如: sh $0 root /opt \033[0m"
        exit 1
    # 2.检查路径是否非法
    elif ! [ -d "${sourcePath}" ]; then
        echo -e "\033[1;31m安装包目录${sourcePath}不存在\033[0m"
        exit 1
    fi
    # 3.检查jdk安装包
    if jarTar=$(ls "${sourcePath}"/*jdk-*.tar.gz); then
        count=$(echo "${jarTar}" | wc -l)
        if [ "1" != "${count}" ]; then
            echo_error "检查到有${count}个安装包,请确认${sourcePath}中只有一个JDK安装包!检测条件:*jdk-*.tar.gz"
            exit 1
        fi
    fi
    # 4.检查用户是否已安装java
    if [ "root" != "${jdkUser}" ]; then
        # 执行返回值0代表java命令可以使用说明用户已经安装了JDK,若java命令不能执行则说明用户尚未安装jdk需要安装
        if sudo su - "${jdkUser}" -c 'java -version >&/dev/null && exit 0 || exit 1'; then
            echo_error "${jdkUser}用户已安装JDK。"
            exit 1
        fi
    else
        javaVersion=$(java -version 2>&1 | grep 'java version' | sed -e 's/"//g' | awk '{print $3}')
        if [[ -n "${javaVersion}" ]]; then
            echo_error "${jdkUser}用户已安装JDK,版本${javaVersion}。"
            exit 1
        fi
    fi
    echo_info "在用户${jdkUser}下安装JDK,JDK安装包为${jarTar}"
    if [ "root" != "${jdkUser}" ]; then
        echo_info "安装目录: /home/${jdkUser}/software"
    else
        echo_info "安装目录: /root/software"
    fi
}

# 创建jdk的安装用户
function createJdkUser() {
    if [ "root" != "${jdkUser}" ]; then
        # 创建es用户和用户组
        if ! grep "^${jdkUser}" /etc/group >&/dev/null; then
            groupadd "${jdkUser}" -g 750
        fi

        if ! grep "^${jdkUser}" /etc/passwd >&/dev/null; then
            useradd -g "${jdkUser}" -u 750 "${jdkUser}"
        fi
    fi
}

# 非root用户安装JDK执行程序
function nonRootInstall() {
    # 创建用户软件安装目录
    mkdir -p /home/"${jdkUser}"/software
    echo_info "开始解压${jarTar}"
    tar -zxf "${jarTar}" -C /home/"${jdkUser}"/software/
    echo_info "解压完成,开始配置jdk环境变量"
    if ! jdkdPath=$(ls -d /home/"${jdkUser}"/software/jdk*_*/); then
        echo_error "jdk安装包解压出来没有jdk文件夹!检测条件:jdk*_*"
        exit 1
    fi
    jdkdcount=$(echo "${jdkdPath}" | wc -l)
    if [ "1" != "${jdkdcount}" ]; then
        echo_error "检查到有${jdkdcount}个jdk解压包,请确认/home/${jdkUser}/software/中只有一个JDK安装包!检测条件:jdk*_*"
        exit 1
    fi
    jdkdPath=${jdkdPath::-1}
    # 配置jdk环境变量
    ## 增加以下配置项
    sed -i '$a \ ' /home/"$jdkUser"/.bashrc
    sed -i '$a # jdk configuration items' /home/"$jdkUser"/.bashrc
    sed -i '$a export JAVA_HOME='${jdkdPath}'' /home/"$jdkUser"/.bashrc
    sed -i '$a export JRE_HOME=${JAVA_HOME}/jre' /home/"$jdkUser"/.bashrc
    sed -i '$a export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH' /home/"$jdkUser"/.bashrc
    sed -i '$a export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin' /home/"$jdkUser"/.bashrc
    sed -i '$a export PATH=$PATH:${JAVA_PATH}' /home/"$jdkUser"/.bashrc
    # 确认用户权限
    chown -R "${jdkUser}":"${jdkUser}" /home/"${jdkUser}/"
    ## 编译,让配置生效
    # shellcheck source=/dev/null
    if sudo su - "${jdkUser}" -c 'java -version >&/dev/null && exit 0 || exit 1'; then
        echo_info "jdk环境变量配置完成"
    else
        echo_error "jdk环境变量配置失败"
        exit 1
    fi
}

# root用户安装JDK执行程序
function rootInstallJdk() {
    # 创建用户软件安装目录
    mkdir -p /root/software
    echo_info "开始解压${jarTar}"
    tar -zxf "${jarTar}" -C /root/software/
    echo_info "解压完成,开始配置jdk环境变量"

    if ! jdkdPath=$(ls -d /root/software/jdk*_*/); then
        echo_error "jdk安装包解压出来没有jdk文件夹!检测条件:jdk*_*"
        exit 1
    fi

    jdkdcount=$(echo "${jdkdPath}" | wc -l)
    if [ "1" != "${jdkdcount}" ]; then
        echo_error "检查到有${jdkdcount}个jdk解压包,请确认/root/software/中只有一个JDK安装包!检测条件:jdk*_*"
        exit 1
    fi

    jdkdPath=${jdkdPath::-1}
    ## 增加以下配置项
    sed -i '$a \ ' ~/.bashrc
    sed -i '$a # jdk configuration items' ~/.bashrc
    sed -i '$a export JAVA_HOME='${jdkdPath}'' ~/.bashrc
    sed -i '$a export JRE_HOME=${JAVA_HOME}/jre' ~/.bashrc
    sed -i '$a export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH' ~/.bashrc
    sed -i '$a export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin' ~/.bashrc
    sed -i '$a export PATH=$PATH:${JAVA_PATH}' ~/.bashrc

    echo_info "jdk环境变量生效"
    ## 编译,让配置生效
    # shellcheck source=/dev/null
    source ~/.bashrc
    javaVersion=$(java -version 2>&1 | grep 'java version' | sed -e 's/"//g' | awk '{print $3}')
    if [[ -n "${javaVersion}" ]]; then
        echo_green "jdk环境变量配置完成"
    else
        echo_error "jdk环境变量配置失败"
        exit 1
    fi
}

# Execute body area
# 日志初始化
initLogModule

echo_info "参数提示:
	第一个参数为安装jdk的用户,
	第二个参数为安装包所在的地址路径(绝对路径).
例如: sh $0 root /opt"

echo_info "=================== 安装前检查begin ==================="
# 验证执行条件
vaildateEx
echo_green "=================== 安装前检查end   ==================="


echo_info "=================== 创建安装用户和用户组begin ==================="

if [ "root" != "${jdkUser}" ]; then
    echo_info "非root用户,创建用户"
    createJdkUser
else
    echo_info "root用户,不创建用户"
fi

echo_green "=================== 创建安装用户和用户组end  ==================="


echo_info "=================== JDK 安装begin ==================="

if [ "root" != "${jdkUser}" ]; then
    nonRootInstall
else
    rootInstallJdk
fi

echo_green "=================== JDK 安装end ==================="

echo_green "=================== 恭喜! JDK安装成功! ==================="
# Return value area
exit 0

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顧棟

若对你有帮助,望对作者鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值