执行文件
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
倒计时: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$