- A+
所属分类:Shell
#!/bin/bash
# JDK 1.8 安装脚本(华为云镜像,修复解压验证)
if [ "$(id -u)" -ne 0 ]; then
echo "请用root权限运行(sudo ./install_jdk8.sh)"
exit 1
fi
# 安装依赖
yum install -y wget >/dev/null 2>&1
# 定义变量
JDK_URL="https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz"
INSTALL_PATH="/usr/local"
TEMP_FILE="/tmp/jdk8.tar.gz"
JAVA_BIN="$INSTALL_PATH/jdk/bin/java"
# 下载函数(带重试机制)
download_jdk() {
echo "正在从华为云镜像下载JDK 1.8..."
local attempt=1
local max_attempts=3
while [ $attempt -le $max_attempts ]; do
echo "尝试下载 ($attempt/$max_attempts)..."
# 适配旧版wget
wget -q $JDK_URL -O $TEMP_FILE
# 检查文件是否存在且非空
if [ -f "$TEMP_FILE" ] && [ -s "$TEMP_FILE" ]; then
# 验证文件大小(华为云JDK 8u202大约为180MB)
FILE_SIZE=$(du -m "$TEMP_FILE" | cut -f1)
if [ "$FILE_SIZE" -lt 150 ]; then
echo "警告:下载文件大小异常 ($FILE_SIZE MB),可能不完整"
rm -f $TEMP_FILE
else
echo "下载完成 (大小: $FILE_SIZE MB)"
return 0
fi
else
echo "下载文件不存在或为空,尝试重新下载..."
rm -f $TEMP_FILE
fi
attempt=$((attempt + 1))
sleep 2
done
echo "错误:下载失败,请检查网络连接或URL是否有效"
return 1
}
# 执行下载
download_jdk || exit 1
# 解压
echo "正在解压JDK..."
mkdir -p "$INSTALL_PATH/jdk_tmp"
tar -zxf $TEMP_FILE -C "$INSTALL_PATH/jdk_tmp"
if [ $? -ne 0 ]; then
echo "错误:解压失败,可能是文件损坏"
rm -rf "$INSTALL_PATH/jdk_tmp"
rm -f $TEMP_FILE
exit 1
fi
# 验证解压内容
JDK_DIR=$(ls -d "$INSTALL_PATH/jdk_tmp/jdk1.8.0_202" 2>/dev/null)
if [ -z "$JDK_DIR" ] || [ ! -d "$JDK_DIR/bin" ]; then
echo "错误:解压后未找到JDK目录或bin目录缺失"
echo "解压内容:"
ls -la "$INSTALL_PATH/jdk_tmp"
rm -rf "$INSTALL_PATH/jdk_tmp"
rm -f $TEMP_FILE
exit 1
fi
# 清理旧的软连接和目录
if [ -L "$INSTALL_PATH/jdk" ]; then
echo "移除旧的软连接: /usr/local/jdk"
rm -f "$INSTALL_PATH/jdk"
elif [ -d "$INSTALL_PATH/jdk" ]; then
echo "移除旧的目录: /usr/local/jdk"
rm -rf "$INSTALL_PATH/jdk"
fi
# 移动到目标位置并创建软连接
echo "将JDK移动到目标位置..."
mv "$JDK_DIR" "$INSTALL_PATH/jdk1.8.0_202"
rm -rf "$INSTALL_PATH/jdk_tmp"
ln -s "$INSTALL_PATH/jdk1.8.0_202" "$INSTALL_PATH/jdk"
echo "创建软连接: /usr/local/jdk → $INSTALL_PATH/jdk1.8.0_202"
# 清理临时文件
rm -f $TEMP_FILE
# 配置环境变量
ENV_FILE="/etc/profile.d/jdk.sh"
cat > $ENV_FILE << EOF
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=\$JAVA_HOME/jre
export CLASSPATH=.:\$JAVA_HOME/lib:\$JRE_HOME/lib
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
# 验证环境变量配置
echo "验证环境变量配置..."
if ! grep -q "JAVA_HOME=/usr/local/jdk" $ENV_FILE; then
echo "错误:环境变量配置失败"
exit 1
fi
# 加载环境变量(当前会话)
source $ENV_FILE
# 验证JDK安装
echo "验证JDK安装..."
if [ ! -x "$JAVA_BIN" ]; then
echo "错误:JDK二进制文件不存在或不可执行"
echo "请检查: $JAVA_BIN"
echo "目录内容:"
ls -la "$INSTALL_PATH/jdk/bin"
exit 1
fi
# 验证Java版本
echo "验证Java版本..."
JAVA_VERSION=$($JAVA_BIN -version 2>&1 | grep version | awk '{print $3}' | tr -d '"')
if [[ "$JAVA_VERSION" == *"1.8.0_202"* ]]; then
echo "JDK 1.8.0_202 安装成功"
echo "版本信息:"
$JAVA_BIN -version
echo "JAVA_HOME: $JAVA_HOME"
echo "PATH: $PATH"
else
echo "安装失败:Java版本验证失败"
echo "检测到版本: $JAVA_VERSION"
echo "请检查: $JAVA_BIN"
exit 1
fi
