【Shell】自动安装JDK

韦原
2023-12-01

执行文件

echo "################################################################################"
echo "# 脚本名称:install_jdk.sh"
echo "# 简介:written by XianYao 2022年9月29日"
echo "#"
echo "# Ubuntu 一键式安装JDK,使用步骤说明"
echo "#   1、保证机器有足够的磁盘空间"
echo "#   2、加最高权限(可忽略): chmod 775 install_jdk"
echo "#   3、加可执行权限: chmod +x install_jdk.sh"
echo "#   4、压缩包请使用官方提供的,自己打的包可能会有问题"
echo "#   5、使用命令:./install_jdk.sh 压缩包路径 安装路径"
echo "#   5.1、例:./install_jdk.sh /home/xy/jdk-8u333-linux-x64.tar.gz /home/xy/java"
echo "#"
echo "################################################################################"
if [ $# -lt 2 ]; then
	echo "参数个数不足, 请检查!!!"
	exit 1
fi
jdkTarFile="$1"
jdkDir="$2"
jdkTarFileName=$(tar -tf "$jdkTarFile" | head -1 | cut -f1 -d"/")
userPermissions="user"
environmentVariableFilePath="$HOME/.profile"
countDown() {
	timeCountdown=$1
	echo -n "倒计时:"
	time=$timeCountdown
	while [ $((time)) -gt 0 ]; do
		((time--))
		hour=$((time / 3600))
		min=$((time % 3600 / 60))
		sec=$((time % 3600 % 60 % 60 % 60))
		if [ "$hour" -lt 10 ]; then
			hour="0$hour"
		fi
		if [ "$min" -lt 10 ]; then
			min="0$min"
		fi
		if [ "$sec" -lt 10 ]; then
			sec="0$sec"
		fi
		echo -e "$hour:$min:$sec\b\b\b\b\b\b\b\b\c"
		sleep 1
	done
	echo "$timeCountdown 秒倒计时结束"
}
countDown 10
preCheck() {
	echo "------------------------------------------------------------> 检查操作系统情况"
	echo "操作系统情况"
	lsb_release -a
	echo "==============================================="
	cat /etc/issue
	echo "磁盘使用空间情况"
	df -h
	echo "内存使用空间情况"
	free -m
}
checkAdmin() {
	echo "------------------------------------------------------------> 检查有无管理员权限"
	echo -n "管理员权限: "
	if [ "$(id -u)" -eq 0 ]; then
		echo "有"
		userPermissions="admin"
		environmentVariableFilePath="/etc/profile"
	else
		echo "无"
		userPermissions="user"
		environmentVariableFilePath="$HOME/.profile"
		while true; do
			read -r -p "继续安装且将jdk环境变量添加到用户变量中,是否同意[Y/N]: " input
			case $input in
			[yY][eE][sS] | [yY])
				echo "继续安装"
				break
				;;
			[nN][oO] | [nN])
				echo "退出安装"
				exit 1
				;;
			*) echo "Invalid input..." ;;
			esac
		done
	fi
}
checkEnvFile() {
	echo "------------------------------------------------------------> 检查环境变量文件"
	echo -n "$environmentVariableFilePath 文件是否存在: "
	if test -e "$environmentVariableFilePath"; then
		echo "存在"
		echo -n "备份 $environmentVariableFilePath 文件: "
		cp /etc/profile "$environmentVariableFilePath""_$(date +%Y-%m-%d_%H:%M:%S)"
		echo "完成"
	else
		echo "不存在"
		echo -n "创建 $environmentVariableFilePath 文件: "
		touch "$environmentVariableFilePath"
		echo "完成"
	fi
}
checkDecompressPath() {
	echo "------------------------------------------------------------> 检查解压缩路径"
	echo -n "$jdkDir/$jdkTarFileName 文件路径是否存在: "
	if test -e "$jdkDir/$jdkTarFileName"; then
		echo "存在"
		res=$(ls -A "$jdkDir"/"$jdkTarFileName")
		if [ -z "$res" ]; then
			echo "$jdkDir/$jdkTarFileName 为空目录"
		else
			echo "$jdkDir/$jdkTarFileName 文件夹不为空, 终止执行!"
			exit
		fi
	else
		echo "不存在"
		echo -n "创建文件夹 $jdkDir : "
		mkdir -p "$jdkDir"
		echo "完成"
	fi
}
uninstallJava() {
	echo "------------------------------------------------------------> 卸载 Java 安装包"
	if [ "$(command -v yum)" ]; then
		echo "使用 yum 卸载 Java 环境"
		yum remove java -y
	elif [ "$(command -v apt-get)" ]; then
		echo "使用 apt-get 卸载 Java 环境"
		apt-get remove java -y
	else
		echo "未找到 yum 或 apt-get 命令, 请手动卸载 Java 环境"
	fi
}
checkJava() {
	echo "------------------------------------------------------------> 检查 Java"
	while true; do
		read -r -p "是否卸载 Java 环境[Y/N]: " input
		case $input in
		[yY][eE][sS] | [yY])
			uninstallJava
			echo "卸载 Java 环境完成"
			break
			;;
		[nN][oO] | [nN])
			echo "不卸载 Java 环境"
			break
			;;
		*) echo "Invalid input..." ;;
		esac
	done
}
deleteJavaEnv() {
	echo "------------------------------------------------------------> 删除环境变量"
	array=("JAVA_HOME" "JRE_HOME" "CLASSPATH" "PATH")
	for param in ${array[*]}; do
		echo -n "$environmentVariableFilePath 文件中是否存在 $param: "
		if grep -q "$param" "$environmentVariableFilePath"; then
			echo "存在"
			echo -n "删除 $environmentVariableFilePath 文件中的 $param: "
			sed -i "/$param/d" "$environmentVariableFilePath"
			echo "完成"
		else
			echo "不存在"
		fi
	done
}
checkJavaEnv() {
	echo "------------------------------------------------------------> 检查 Java 环境变量"
	if type -p java; then
		while true; do
			read -r -p "本机已在 $environmentVariableFilePath 配置了 Java 环境变量,无须在安装,是否继续安装 [Y/N] " input
			case $input in
			[yY][eE][sS] | [yY])
				checkJava
				deleteJavaEnv
				break
				;;
			[nN][oO] | [nN])
				echo "退出安装"
				exit 1
				;;
			*) echo "Invalid input..." ;;
			esac
		done
	else
		echo "本机未安装 Java, 开始配置 Java 环境变量"
	fi
}
unpackJava() {
	echo "------------------------------------------------------------> 解压 Java"
	echo -n "开始解压 JDK 文件: "
	tar -zxf "$jdkTarFile" -C "$jdkDir"
	echo "JDK 文件解压完成"
}
addJavaEnv() {
	echo "------------------------------------------------------------> 添加 Java 环境变量"
	echo -n "添加/替换 JAVA_HOME 系统环境变量: "
	echo "export JAVA_HOME=$jdkDir/$jdkTarFileName" >>"$environmentVariableFilePath"
	echo "完成"
	echo -n "添加/替换 JRE_HOME 系统环境变量: "
	echo "export JRE_HOME=\$JAVA_HOME/jre" >>"$environmentVariableFilePath"
	echo "完成"
	echo -n "添加/替换 CLASSPATH 系统环境变量: "
	echo "export CLASSPATH=.:\$JAVA_HOME/lib:\$JRE_HOME/lib:\$JAVA_HOME/lib/tools.jar:\$JAVA_HOME/lib/dt.jar" >>"$environmentVariableFilePath"
	echo "完成"
	echo -n "添加/替换 PATH 系统环境变量: "
	echo "export PATH=\$JAVA_HOME/bin:\$JRE_HOME/bin:\$PATH" >>"$environmentVariableFilePath"
	echo "完成"
	echo " Java 环境变量添加: 完成"
}
reloadConfigFile() {
	echo "------------------------------------------------------------> 重新加载配置文件"
	echo -n "重新加载配置文件: "
	if [ "$userPermissions" == "admin" ]; then
		source /etc/profile
	else
		source ~/.profile
	fi
	echo "完成"
	echo "------------------------------------------------------------> Java 版本信息"
	java -version
}
preCheck
checkAdmin
sleep 1
checkEnvFile
sleep 1
checkDecompressPath
sleep 1
checkJavaEnv
sleep 1
unpackJava
sleep 1
addJavaEnv
sleep 1
reloadConfigFile

执行结果

xy@xy-pc:~/Desktop$ ./install_jdk.sh /home/xy/jdk-8u333-linux-x64.tar.gz /home/xy/java
################################################################################
# 脚本名称:install_jdk.sh
# 简介:written by XianYao 2022年9月29日
#
# Ubuntu 一键式安装JDK,使用步骤说明
#   1、保证机器有足够的磁盘空间
#   2、加最高权限(可忽略): chmod 775 install_jdk
#   3、加可执行权限: chmod +x install_jdk.sh
#   4、压缩包请使用官方提供的,自己打的包可能会有问题
#   5、使用命令:./install_jdk.sh 压缩包路径 安装路径
#   5.1、例:./install_jdk.sh /home/xy/jdk-8u333-linux-x64.tar.gz /home/xy/java
#
################################################################################
倒计时:10 秒倒计时结束
------------------------------------------------------------> 检查操作系统情况
操作系统情况
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04
Codename:       jammy
===============================================
Ubuntu 22.04.1 LTS \n \l

磁盘使用空间情况
文件系统        容量  已用  可用 已用% 挂载点
tmpfs           389M  2.1M  387M    1% /run
/dev/sda3        20G   11G  7.7G   58% /
tmpfs           1.9G     0  1.9G    0% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
/dev/sda2       512M  5.3M  507M    2% /boot/efi
tmpfs           389M  4.7M  385M    2% /run/user/1000
内存使用空间情况
               total        used        free      shared  buff/cache   available
内存:       3889        1096         728          27        2064        2523
交换:       2139           0        2139
------------------------------------------------------------> 检查有无管理员权限
管理员权限: 无
继续安装且将jdk环境变量添加到用户变量中,是否同意[Y/N]: y
继续安装
------------------------------------------------------------> 检查环境变量文件
/home/xy/.profile 文件是否存在: 存在
备份 /home/xy/.profile 文件: 完成
------------------------------------------------------------> 检查解压缩路径
/home/xy/java/jdk1.8.0_333 文件路径是否存在: 不存在
创建文件夹 /home/xy/java : 完成
------------------------------------------------------------> 检查 Java 环境变量
本机未安装java, 开始配置java环境变量
------------------------------------------------------------> 解压 Java
开始解压JDK文件:JDK文件解压完成
------------------------------------------------------------> 添加 Java 环境变量
添加JAVA_HOME系统环境变量: 完成
添加JRE_HOME系统环境变量: 完成
添加CLASSPATH系统环境变量: 完成
添加PATH系统环境变量: 完成
java环境变量添加: 完成
------------------------------------------------------------> 重新加载配置文件
重新加载配置文件: 完成
------------------------------------------------------------> Java 版本信息
java version "1.8.0_333"
Java(TM) SE Runtime Environment (build 1.8.0_333-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.333-b02, mixed mode)
xy@xy-pc:~/Desktop$
 类似资料: