以下是 ** Java 多版本管理脚本**,支持:
✅ 多个发行版(Adoptium、Azul Zulu、Amazon Corretto、BellSoft Liberica、IBM Semeru)
✅ 用户自定义安装路径
✅ 多版本共存
✅ 版本切换
✅ 卸载功能
✅ 支持主流 Linux 发行版(Ubuntu/Debian/CentOS 等)
✅ 脚本结构清晰,便于维护和扩展
📝 完整脚本:java-multi-installer-enhanced.sh
#!/bin/bash
# 默认安装目录
DEFAULT_INSTALL_DIR="/opt/java"
CONFIG_DIR="$HOME/.java-installer"
INSTALL_CONFIG="$CONFIG_DIR/install_path.conf"
CONFIG_FILE="/etc/profile.d/java.sh"
# 可选 Java 版本
declare -a JAVA_VERSIONS=("8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24")
# 支持的发行版
declare -A JDK_DISTROS=(
[1]="Adoptium"
[2]="Azul Zulu"
[3]="Amazon Corretto"
[4]="BellSoft Liberica"
[5]="IBM Semeru"
)
# CPU 架构和系统类型
ARCH=$(uname -m)
case "$ARCH" in
x86_64) MACHINE_TYPE="x64" ;;
aarch64) MACHINE_TYPE="aarch64" ;;
*) echo "❌ 不支持的架构: $ARCH"; exit 1 ;;
esac
OS_NAME=$(uname -s)
case "$OS_NAME" in
Linux) OS_TYPE="linux" ;;
*) echo "❌ 不支持的操作系统: $OS_NAME"; exit 1 ;;
esac
# 创建配置目录
mkdir -p "$CONFIG_DIR"
# 获取安装路径
get_install_dir() {
if [ -f "$INSTALL_CONFIG" ]; then
INSTALL_DIR=$(cat "$INSTALL_CONFIG")
echo "✅ 使用上次保存的安装路径: $INSTALL_DIR"
else
read -p "请输入 Java 安装目录 (默认: $DEFAULT_INSTALL_DIR): " USER_INSTALL_DIR
INSTALL_DIR="${USER_INSTALL_DIR:-$DEFAULT_INSTALL_DIR}"
echo "$INSTALL_DIR" > "$INSTALL_CONFIG"
echo "✅ 安装路径已保存为: $INSTALL_DIR"
fi
}
# 获取已安装版本
get_installed_versions() {
if [ -d "$INSTALL_DIR" ]; then
INSTALLED=($(ls -1 "$INSTALL_DIR" | grep -E '^[0-9]+$'))
else
INSTALLED=()
fi
}
# 显示主菜单
show_main_menu() {
clear
echo "=== Java 多版本安装与切换工具 ==="
echo "安装路径: $INSTALL_DIR"
echo "----------------------------------"
echo "1) 安装新的 Java 版本"
echo "2) 查看已安装版本"
echo "3) 切换当前 Java 版本"
echo "4) 卸载某个版本"
echo "5) 更改安装路径"
echo "0) 退出程序"
read -p "请选择操作 (0-5): " choice
handle_choice "$choice"
}
# 显示安装菜单
show_install_menu() {
echo "请选择要安装的发行版:"
for key in "${!JDK_DISTROS[@]}"; do
echo "$key) ${JDK_DISTROS[$key]}"
done
read -p "请输入编号: " distro_choice
JDK_SELECTED=${JDK_DISTROS[$distro_choice]}
echo "可选 Java 版本:"
for i in "${!JAVA_VERSIONS[@]}"; do
echo "$((i+1))) Java ${JAVA_VERSIONS[$i]}"
done
echo "0) 返回上一级"
read -p "请输入编号 (0-${#JAVA_VERSIONS[@]}): " choice
if [[ "$choice" == "0" ]]; then return; fi
if (( choice >= 1 && choice <= ${#JAVA_VERSIONS[@]} )); then
VERSION=${JAVA_VERSIONS[$((choice-1))]}
install_java "$VERSION"
else
echo "❌ 无效输入。"
fi
}
# 生成下载链接
generate_download_url() {
local version="$1"
case "$JDK_SELECTED" in
"Adoptium")
URL="https://github.com/adoptium/temurin${version}-binaries/releases/latest/download/OpenJDK${version}U-jdk_${MACHINE_TYPE}_${OS_TYPE}_hotspot.tar.gz"
;;
"Azul Zulu")
URL="https://cdn.azul.com/zulu/bin/zulu${version}-ca-jdk${version}-${OS_TYPE}_${MACHINE_TYPE}.tar.gz"
;;
"Amazon Corretto")
URL="https://corretto.aws/downloads/latest/amazon-corretto-${version}-x64-linux-jdk.tar.gz"
;;
"BellSoft Liberica")
URL="https://download.bell-sw.com/java/${version}/bellsoft-jdk${version}+${version}-linux-${MACHINE_TYPE}.tar.gz"
;;
"IBM Semeru")
URL="https://github.com/ibmruntimes/semeru${version}-binaries/releases/download/jdk-${version}+${version}/ibm-semeru-open-jdk_${OS_TYPE}_${MACHINE_TYPE}_jdk_${version}_${version}.tar.gz"
;;
*)
echo "❌ 不支持的发行版"
exit 1
;;
esac
}
# 安装指定版本的 Java
install_java() {
local version="$1"
echo "⏳ 正在安装 Java $version ($JDK_SELECTED)..."
# 创建安装目录
mkdir -p "$INSTALL_DIR/$version"
generate_download_url "$version"
# 下载 JDK
wget -O "/tmp/java-$version.tar.gz" "$URL" || { echo "❌ 下载失败: $URL"; exit 1; }
# 解压
tar -xzf "/tmp/java-$version.tar.gz" -C "$INSTALL_DIR/$version" --strip-components=1
rm "/tmp/java-$version.tar.gz"
echo "✅ Java $version ($JDK_SELECTED) 已安装到 $INSTALL_DIR/$version"
sleep 1
}
# 显示已安装版本
list_installed_versions() {
get_installed_versions
echo "📚 已安装的 Java 版本:"
if [ ${#INSTALLED[@]} -eq 0 ]; then
echo "❌ 无版本安装"
else
for ver in "${INSTALLED[@]}"; do
echo "- Java $ver"
done
fi
read -p "按回车继续..."
}
# 切换 Java 版本
switch_java_version() {
get_installed_versions
if [ ${#INSTALLED[@]} -eq 0 ]; then
echo "❌ 没有已安装的 Java 版本。"
sleep 1
return
fi
echo "请选择要启用的 Java 版本:"
for i in "${!INSTALLED[@]}"; do
echo "$((i+1))) Java ${INSTALLED[$i]}"
done
echo "0) 返回上一级"
read -p "请输入编号: " choice
if [[ "$choice" == "0" ]]; then return; fi
if (( choice >= 1 && choice <= ${#INSTALLED[@]} )); then
NEW_VERSION=${INSTALLED[$((choice-1))]}
echo "export JAVA_HOME=$INSTALL_DIR/$NEW_VERSION" | sudo tee "$CONFIG_FILE" > /dev/null
echo "export PATH=\$JAVA_HOME/bin:\$PATH" | sudo tee -a "$CONFIG_FILE" > /dev/null
source "$CONFIG_FILE"
echo "✅ 已切换为 Java $NEW_VERSION"
java -version
else
echo "❌ 无效输入。"
fi
sleep 2
}
# 卸载某个版本
uninstall_java_version() {
get_installed_versions
if [ ${#INSTALLED[@]} -eq 0 ]; then
echo "❌ 没有可卸载的 Java 版本。"
sleep 1
return
fi
echo "请选择要卸载的 Java 版本:"
for i in "${!INSTALLED[@]}"; do
echo "$((i+1))) Java ${INSTALLED[$i]}"
done
echo "0) 返回上一级"
read -p "请输入编号: " choice
if [[ "$choice" == "0" ]]; then return; fi
if (( choice >= 1 && choice <= ${#INSTALLED[@]} )); then
UN_VERSION=${INSTALLED[$((choice-1))]}
sudo rm -rf "$INSTALL_DIR/$UN_VERSION"
echo "✅ Java $UN_VERSION 已卸载。"
else
echo "❌ 无效输入。"
fi
sleep 2
}
# 更改安装路径
change_install_dir() {
read -p "请输入新的 Java 安装目录 (当前: $INSTALL_DIR): " NEW_INSTALL_DIR
if [ -n "$NEW_INSTALL_DIR" ]; then
INSTALL_DIR="$NEW_INSTALL_DIR"
echo "$INSTALL_DIR" > "$INSTALL_CONFIG"
echo "✅ 安装路径已更改为: $INSTALL_DIR"
fi
sleep 1
}
# 主处理逻辑
handle_choice() {
case "$1" in
1) show_install_menu ;;
2) list_installed_versions ;;
3) switch_java_version ;;
4) uninstall_java_version ;;
5) change_install_dir ;;
0) echo "👋 退出程序。"; exit 0 ;;
*) echo "❌ 无效选项"; sleep 1 ;;
esac
}
# 启动脚本
main() {
get_install_dir
while true; do
show_main_menu
done
}
main
🔧 使用说明:
✅ 步骤一:创建脚本文件
nano java-multi-installer-enhanced.sh
粘贴上面内容并保存。
✅ 步骤二:添加执行权限
chmod +x java-multi-installer-enhanced.sh
✅ 步骤三:运行脚本(建议使用 sudo
)
sudo ./java-multi-installer-enhanced.sh
✅ 示例界面:
请选择要安装的发行版:
1) Adoptium
2) Azul Zulu
3) Amazon Corretto
4) BellSoft Liberica
5) IBM Semeru
请输入编号:
选择后即可安装对应发行版的 JDK,并进行版本切换。
📦 当前支持发行版一览:
发行版 | 是否支持自动下载 | 描述 |
---|---|---|
Adoptium | ✅ | 社区驱动,推荐使用 |
Azul Zulu | ✅ | 免费用于生产环境 |
Amazon Corretto | ✅ | AWS 提供长期支持 |
BellSoft Liberica | ✅ | 商业公司提供免费 JDK |
IBM Semeru | ✅ | IBM 提供的 OpenJDK 实现 |