shell 脚本案例之一键安装JDK
Posted 顧棟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell 脚本案例之一键安装JDK相关的知识,希望对你有一定的参考价值。
Linux base shell 脚本案例 安装JDK(脚本可执行)
系统环境
Linux服务器,作者使用centos7操作系统,支持裸机安装JDK或者没有安装过JDK的用户安装JDK。
运行说明
-
拥有root用户使用权
-
将安装脚本和JDK安装包(tar.gz包)拷贝至服务器上。
-
通过root用户 执行脚本,例如:
sh installJDK.sh gudong /opt/software
。脚本执行参数说明:
- 第一个参数是需要安装jdk的用户。–必填项
- 第二个参数是JDK安装包所在的目录(绝对地址)。–必填项
-
脚本提示安装成功之后,即可验证使用。安装详情,可在日志文件
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 es
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 "=================== 安装前检查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
以上是关于shell 脚本案例之一键安装JDK的主要内容,如果未能解决你的问题,请参考以下文章
shell脚本之一键部署PXE远程安装服务,将解放双手进行到底!
shell脚本之一键部署web服务器Nginx,日常解放双手!