下载链接:Java Archive | Oracle 中国
more jdk.sh
#!/bin/bash
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
clean_old_files() {
echo -e "${YELLOW}正在清理旧文件和可能的损坏文件...${NC}"
find /tmp -name '*jdk*.tar.gz' -mtime +1 -delete
find /tmp -name '*jdk*?AuthParam=*' -delete
find / -name '*jdk*.tar.gz?AuthParam=*' -delete 2>/dev/null
find / -name '*jdk*.tar.gz' ! -name '*.tar.gz' -delete 2>/dev/null
echo -e "${GREEN}清理完成。${NC}"
}
clean_old_files
read -p "请输入JDK下载链接(直接回车跳过下载步骤): " download_link
if [ ! -z "$download_link" ]; then
echo "正在下载JDK..."
filename=$(basename "$download_link")
clean_filename=$(echo "$filename" | sed 's/\?.*//')
curl -L -b "oraclelicense=accept-securebackup-cookie" -o "/tmp/$clean_filename" "$download_link"
if [ $? -ne 0 ]; then
echo -e "${RED}下载失败,请检查链接是否正确。${NC}"
exit 1
fi
echo -e "${GREEN}下载完成。${NC}"
fi
JAVA=$(find / -name 'jdk*tar.gz' -type f -print0 2>/dev/null | xargs -0 ls -t | head -n 1 | xargs dirname)
JDK=$(find / -name 'jdk*tar.gz' -type f -print0 2>/dev/null | xargs -0 ls -t | head -n 1 | xargs basename)
if [ -z "$JAVA" ] || [ -z "$JDK" ]; then
echo -e "${RED}未找到有效的JDK压缩包,请确保已下载正确的文件。${NC}"
exit 1
fi
echo -e "${GREEN}JAVA Directory: $JAVA${NC}"
echo -e "${GREEN}JDK File: $JDK${NC}"
cd "$JAVA"
if ! gzip -t "$JDK" > /dev/null 2>&1; then
echo -e "${RED}文件不是有效的 gzip 格式。${NC}"
exit 1
fi
tar xf "$JDK" -C /usr/local/
if [ $? -ne 0 ]; then
echo -e "${RED}解压 $JDK 失败。${NC}"
exit 1
fi
JDKAPP=$(find /usr/local/ -maxdepth 1 -type d -name 'jdk*' | sort -V | tail -n 1 | xargs basename)
echo -e "${GREEN}JDKAPP Directory: $JDKAPP${NC}"
if [ -z "$JDKAPP" ]; then
echo -e "${RED}未找到解压后的JDK目录。${NC}"
exit 1
fi
ln -sfn /usr/local/"$JDKAPP" /usr/local/jdk
cat > /etc/profile.d/jdk.sh << EOF
export JAVA_HOME=/usr/local/jdk
export PATH=\$JAVA_HOME/bin:\$PATH
export JRE_HOME=\$JAVA_HOME/jre
export CLASSPATH=\$JAVA_HOME/lib/:\$JRE_HOME/lib/
EOF
apply_env() {
source /etc/profile.d/jdk.sh
if command -v java &>/dev/null; then
echo -e "${GREEN}JDK环境变量已成功应用到当前会话。${NC}"
echo -e "${GREEN}当前Java版本:${NC}"
java -version
else
echo -e "${YELLOW}无法在当前shell会话中识别java命令。${NC}"
echo -e "${YELLOW}请检查安装是否成功,或尝试重新登录。${NC}"
fi
}
echo -e "${GREEN}JDK安装和配置已完成。${NC}"
echo -e "${YELLOW}要立即在当前会话中应用新的环境变量,请执行以下命令:${NC}"
echo -e "${GREEN}source /etc/profile.d/jdk.sh${NC}"
read -p "是否要立即应用环境变量?(y/n) " answer
if [[ $answer == [Yy]* ]]; then
apply_env
else
echo -e "${YELLOW}环境变量将在下次登录时生效,或者您可以稍后手动执行 'source /etc/profile.d/jdk.sh'。${NC}"
fi
chmod 755 jdk.sh