#! /bin/bash # Arch Linux helper script to set/unset/check/fix the enabled Java environment # This program may be freely redistributed under the terms of the GNU General Public License # # Author: Guillaume ALAUX <guillaume@archlinux.org> # Modify: by lzf, 2024-11-26 # feature: # 1. add jdk download # 2. support other linux # warning: this script will change /bin/java link JVM_DIR=/usr/lib/jvm #JVM_DIR=./jvm DEFAULT_NAME=default DEFAULT_PATH=${JVM_DIR}/${DEFAULT_NAME} DEFAULT_NAME_JRE=default-runtime DEFAULT_PATH_JRE=${JVM_DIR}/${DEFAULT_NAME_JRE} #ORIGIN_JAVA_LN=$PWD/bin/java ORIGIN_JAVA_LN=/bin/java # Utility functions check_root() { return if [ $(id -u) -ne 0 ]; then echo 'This script must be run as root' exit 1 fi } # $1: parameter count given to this script for this option # $2: expected parameter count for this option check_param_count() { if [ $1 -ne $2 ]; then echo 'Wrong parameter count' exit 2 fi } # Second level functions get_default_java() { path=$(readlink -e ${DEFAULT_PATH}) if [ "x${path}" != "x/dev/null" ]; then echo ${path/${JVM_DIR}\/} else echo "" fi } get_installed_javas() { if [ -d ${JVM_DIR} ]; then for dir in $(find ${JVM_DIR} -mindepth 1 -maxdepth 1 -type d | sort); do if [ -x ${dir}/bin/java ]; then javas+=(${dir/${JVM_DIR}\/}) else if [ -x ${dir}/jre/bin/java ]; then javas+=(${dir/${JVM_DIR}\/}/jre) fi fi done fi echo ${javas[@]} } # $1: Java environment name to test is_java_valid() { test "x$1" != "x${DEFAULT_NAME}" && test -x ${JVM_DIR}/$1/bin/java } # $1: Java environment name to set as default set_default_link_to() { new_default=$1 unlink ${DEFAULT_PATH} 2>/dev/null ln -sf ${new_default} ${DEFAULT_PATH} unlink ${DEFAULT_PATH_JRE} 2>/dev/null if [[ -d ${new_default}/jre ]]; then ln -sf ${new_default}/jre ${DEFAULT_PATH_JRE} else ln -sf ${new_default} ${DEFAULT_PATH_JRE} fi } unset_default_link() { unlink ${DEFAULT_PATH} 2>/dev/null unlink ${DEFAULT_PATH_JRE} 2>/dev/null } # First level functions do_status() { installed_java=($(get_installed_javas)) if [ ${#installed_java[@]} -eq 0 ]; then echo 'No compatible Java environment installed' else default_java=$(get_default_java) echo 'Available Java environments:' for java in ${installed_java[@]}; do # We discoverd this Java env but its JRE is actually set as default if [ "${java}/jre" = "${default_java}" ]; then echo -e " ${java} (${java}/jre default)" elif [ ${java} = "${default_java}" ]; then echo -e " ${java} (default)" else echo " ${java}" fi done if [ -z ${default_java} ]; then echo "No Java environment set as default" fi fi } do_get() { get_default_java } # $1: Java environment name to set as default do_set() { if ! is_java_valid $1; then echo "'${JVM_DIR}/$1' is not a valid Java environment path" exit 1 fi default=$(get_default_java) if [ "x$1" != "x${default}" ] || ! is_java_valid ${default}; then unset_default_link set_default_link_to $1 fi #parent_dir=$(dirname$1) #if is_java_valid ${parent_dir}; then # echo"Warning: '${parent_dir}' looks like a valid JDK whereas '$1' is set as default" # echo"Fix this with 'archlinux-java set ${parent_dir}'" #fi } # $1: Java environment name to unset do_unset() { unset_default_link } do_fix() { default=$(get_default_java) if is_java_valid ${default}; then # If its parent is also a valid Java environment if is_java_valid $(dirname ${default}); then unset_default_link set_default_link_to $(dirname ${default}) fi else prev=$(readlink ${DEFAULT_PATH}) unset_default_link potential_fixes=("${prev/\/jre}" "${prev}/jre") openjdk8=('java-8-openjdk' 'java-8-openjdk/jre') # List of environments to check by order of preference: # - first potential fixes of user choices, # - then OpenJDK8 as it is considered a default in Arch Linux # - finally, any installed environment to_check=(${potential_fixes[@]} ${openjdk8[@]} $(get_installed_javas)) for java in ${to_check[@]}; do if ! is_java_valid $(get_default_java) && is_java_valid ${java}; then set_default_link_to ${java} fi done fi if ! is_java_valid $(get_default_java); then echo 'No valid Java environment found' fi } # 下载并解压,避免繁琐的操作 download_and_untar(){ file="$JVM_DIR/$1" wget -O "$file" "$2" tar -xf "$file" -C "$JVM_DIR" } # 这里写死了 install(){ case $1 in 8) download_and_untar jdk-8u421-linux-x64.tar.gz https://d.injdk.cn/d/download/oraclejdk/8/jdk-8u421-linux-x64.tar.gz ;; 11) download_and_untar jdk-11.0.24_linux-x64_bin.tar.gz https://d.injdk.cn/d/download/oraclejdk/11/jdk-11.0.24_linux-x64_bin.tar.gz ;; 17) download_and_untar jdk-17_linux-x64_bin.tar.gz https://d.injdk.cn/d/download/oraclejdk/17/jdk-17_linux-x64_bin.tar.gz ;; 21) download_and_untar jdk-21_linux-x64_bin.tar.gz https://d.injdk.cn/d/download/oraclejdk/21/jdk-21_linux-x64_bin.tar.gz ;; 23) download_and_untar jdk-23_linux-x64_bin.tar.gz https://d.injdk.cn/d/download/oraclejdk/23/jdk-23_linux-x64_bin.tar.gz ;; *) echo "暂不支持$1" exit 1 ;; esac } # 为了兼容其他发行版,强制将/bin/java连接到了$JDK_DIR/default/bin/java change_ln(){ if [ -f $ORIGIN_JAVA_LN ];then if ! [[ $(readlink $ORIGIN_JAVA_LN) == *default* ]]; then cp $ORIGIN_JAVA_LN ".$ORIGIN_JAVA_LN.back" unlink /bin/java ln -s "$JVM_DIR/default/bin/java" $ORIGIN_JAVA_LN fi else ln -s "$JVM_DIR/default/bin/java" $ORIGIN_JAVA_LN fi } usage() { echo "$(basename $0) <COMMAND>" echo -e "\nCOMMAND:" echo -e '\tstatus\t\tList installed Java environments and enabled one' echo -e '\tget\t\tReturn the short name of the Java environment set as default' echo -e '\tset <JAVA_ENV>\tForce <JAVA_ENV> as default' echo -e '\tunset\t\tUnset current default Java environment' echo -e '\tfix\t\tFix an invalid/broken default Java environment configuration' echo -e '\tinstall 8/11/17/21/23\t\tInstall jdk tar' } # 初始化 init(){ # 判断jvm目录是否存在 if [ ! -d "$JVM_DIR" ]; then mkdir -p "$JVM_DIR" fi } ## Main init case $1 in 'status') do_status;; 'get') do_get;; 'set') check_root; check_param_count $# 2; do_set $2; change_ln;; 'unset') check_root; do_unset;; 'fix') check_root; do_fix;; 'install') check_root; install $2;; 'help' | '--help' | '-h' | '') usage;; *) echo "$(basename $0): unknown option '$@'"; exit 1;; esac
#!/bin/bash # 检测系统类型 function detect_os() { if [[ -f /etc/os-release ]]; then . /etc/os-release echo "$ID" else echo "无法检测操作系统类型。" exit 1 fi } # 修改 IP 地址 function set_ip() { local iface="$1" local ip="$2" local netmask="$3" sudo ip addr flush dev "$iface" # 清除现有 IP 地址 sudo ip addr add "$ip/$netmask" dev "$iface" # 添加新 IP 地址 sudo ip link set "$iface" up # 启动网卡 } # 修改 DNS function set_dns() { local dns="$1" local connection_name="$(nmcli -t -f name con show --active | grep -m 1 "$iface")" if [ -z "$connection_name" ]; then echo "未找到活动连接,无法设置 DNS。" exit 1 fi nmcli con mod "$connection_name" ipv4.dns "$dns" nmcli con up "$connection_name" # 重新启动连接 } # 主程序 OS_NAME=$(detect_os) read -p "请输入网卡名称 (例如 ens33): " iface read -p "请输入新的 IP 地址 (例如 192.168.1.122): " ip read -p "请输入子网掩码 (例如 24): " netmask read -p "请输入新的 DNS 地址 (例如 8.8.8.8): " dns set_ip "$iface" "$ip" "$netmask" set_dns "$dns"