From 61905d67655bd46155e6fcd2c0ee151bae073045 Mon Sep 17 00:00:00 2001
From: SuperManito <68613938+SuperManito@users.noreply.github.com>
Date: Sat, 6 May 2023 22:47:10 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=83=A8=E5=88=86=E5=91=BD?=
 =?UTF-8?q?=E4=BB=A4=E5=8F=82=E6=95=B0=20&=20=E4=B8=80=E4=BA=9B=E4=BC=98?=
 =?UTF-8?q?=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
 ChangeMirrors.sh            | 546 +++++++++++++++++++-----------------
 README.md                   |   2 +-
 docs/index.md               |   2 +-
 docs/main.sh                | 546 +++++++++++++++++++-----------------
 docs/use/command-options.md |  32 ++-
 5 files changed, 606 insertions(+), 522 deletions(-)
diff --git a/ChangeMirrors.sh b/ChangeMirrors.sh
index 910388d..99a1db5 100644
--- a/ChangeMirrors.sh
+++ b/ChangeMirrors.sh
@@ -175,18 +175,65 @@ function StartTitle() {
     echo -e ' 欢迎使用 GNU/Linux 一键更换软件源脚本'
 }
 
-function AuthorSignature() {
-    echo -e "[\033[1;34m官网\033[0m] ${WEBSITE}\n"
+## 报错退出
+function Output_Error() {
+    [ "$1" ] && echo -e "\n$ERROR $1\n"
+    exit 1
 }
 
 ## 权限判定
 function PermissionJudgment() {
     if [ $UID -ne 0 ]; then
-        echo -e "\n$ERROR 权限不足,请使用 Root 用户运行本脚本\n"
-        exit 1
+        Output_Error "权限不足,请使用 Root 用户运行本脚本"
     fi
 }
 
+## 命令选项兼容性判断
+function CheckCommandOptions() {
+    case "${SYSTEM_FACTIONS}" in
+    "${SYSTEM_DEBIAN}")
+        if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_DEBIAN}" ]]; then
+            if [[ "${SOURCE_SECURITY}" == "true" || "${SOURCE_BRANCH_SECURITY}" == "true" ]]; then
+                Output_Error "当前系统不支持使用 debian-security 仓库故无法使用相关参数,请确认后重试!"
+            fi
+        fi
+        if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then
+            Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!"
+        fi
+        ;;
+    "${SYSTEM_REDHAT}")
+        if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_CENTOS}" && "${SYSTEM_JUDGMENT}" != "${SYSTEM_RHEL}" ]]; then
+            if [[ "${SOURCE_VAULT}" == "true" || "${SOURCE_BRANCH_VAULT}" == "true" ]]; then
+                Output_Error "当前系统不支持使用 centos-vault 仓库故无法使用相关参数,请确认后重试!"
+            fi
+        fi
+        case "${SYSTEM_JUDGMENT}" in
+        "${SYSTEM_FEDORA}")
+            if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then
+                Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!"
+            fi
+            ;;
+        esac
+        ;;
+    "${SYSTEM_OPENEULER}")
+        if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then
+            Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!"
+        fi
+        ;;
+    "${SYSTEM_OPENSUSE}")
+        if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then
+            Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!"
+        fi
+        ;;
+    "${SYSTEM_ARCH}")
+        if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then
+            Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!"
+        fi
+        ;;
+    esac
+
+}
+
 ## 系统判定变量
 function EnvJudgment() {
     ## 定义系统名称
@@ -209,20 +256,15 @@ function EnvJudgment() {
     elif [[ "${SYSTEM_NAME}" == *"openSUSE"* ]]; then
         SYSTEM_FACTIONS="${SYSTEM_OPENSUSE}"
     else
-        echo -e "\n$ERROR 无法判断当前运行环境,请先确认本脚本是否已经适配当前操作系统\n"
-        exit 1
+        Output_Error "无法判断当前运行环境,请先确认本脚本是否已经适配当前操作系统"
     fi
-    ## 开始使用
-    StartTitle
     ## 判定系统名称、版本、版本号
     case "${SYSTEM_FACTIONS}" in
     "${SYSTEM_DEBIAN}")
         if [ ! -x /usr/bin/lsb_release ]; then
             apt-get install -y lsb-release
             if [ $? -ne 0 ]; then
-                echo -e "\n$ERROR lsb-release 软件包安装失败"
-                echo -e "\n本脚本需要通过 lsb_release 指令判断系统类型,当前可能为精简安装的系统,因为正常情况下系统会自带该软件包,请自行安装后重新执行脚本!\n"
-                exit 1
+                Output_Error "lsb-release 软件包安装失败\n本脚本需要通过 lsb_release 指令判断系统类型,当前可能为精简安装的系统,因为正常情况下系统会自带该软件包,请自行安装后重新执行脚本!"
             fi
         fi
         SYSTEM_JUDGMENT="$(lsb_release -is)"
@@ -272,7 +314,7 @@ function EnvJudgment() {
     if [[ -z "${SOURCE_BRANCH}" ]]; then
         ## 默认
         SOURCE_BRANCH="$(echo "${SYSTEM_JUDGMENT,,}" | sed "s/ /-/g")"
-        ## 定制
+        ## 处理特殊
         case "${SYSTEM_JUDGMENT}" in
         "${SYSTEM_RHEL}")
             case ${SYSTEM_VERSION_NUMBER:0:1} in
@@ -285,7 +327,7 @@ function EnvJudgment() {
             esac
             ;;
         "${SYSTEM_CENTOS}")
-            if [[ ${DEVICE_ARCH} == "x86_64" ]]; then
+            if [[ "${DEVICE_ARCH}" == "x86_64" ]]; then
                 SOURCE_BRANCH="centos"
             else
                 SOURCE_BRANCH="centos-altarch"
@@ -294,7 +336,7 @@ function EnvJudgment() {
         "${SYSTEM_CENTOS_STREAM}")
             case ${SYSTEM_VERSION_NUMBER:0:1} in
             8)
-                if [[ ${DEVICE_ARCH} == "x86_64" ]]; then
+                if [[ "${DEVICE_ARCH}" == "x86_64" ]]; then
                     SOURCE_BRANCH="centos"
                 else
                     SOURCE_BRANCH="centos-altarch"
@@ -306,14 +348,14 @@ function EnvJudgment() {
             esac
             ;;
         "${SYSTEM_UBUNTU}")
-            if [[ ${DEVICE_ARCH} == "x86_64" ]] || [[ ${DEVICE_ARCH} == *i?86* ]]; then
+            if [[ "${DEVICE_ARCH}" == "x86_64" ]] || [[ "${DEVICE_ARCH}" == *i?86* ]]; then
                 SOURCE_BRANCH="ubuntu"
             else
                 SOURCE_BRANCH="ubuntu-ports"
             fi
             ;;
         "${SYSTEM_ARCH}")
-            if [[ ${DEVICE_ARCH} == "x86_64" ]] || [[ ${DEVICE_ARCH} == *i?86* ]]; then
+            if [[ "${DEVICE_ARCH}" == "x86_64" ]] || [[ "${DEVICE_ARCH}" == *i?86* ]]; then
                 SOURCE_BRANCH="archlinux"
             else
                 SOURCE_BRANCH="archlinuxarm"
@@ -330,6 +372,10 @@ function EnvJudgment() {
         SYNC_TXT="同步"
         ;;
     esac
+    ## 命令选项兼容性判断
+    CheckCommandOptions
+    ## 开始使用
+    StartTitle
 }
 
 ## 选择软件源
@@ -398,9 +444,7 @@ function ChooseMirrors() {
                 continue
             fi
         done
-        if [[ ${USE_INTRANET_SOURCE} == "true" ]]; then
-            SOURCE="${intranet_source}"
-        elif [[ -z "${USE_INTRANET_SOURCE}" ]]; then
+        if [[ -z "${USE_INTRANET_SOURCE}" ]]; then
             local CHOICE=$(echo -e "\n${BOLD}└─ 默认使用软件源的公网地址,是否继续? [Y/n] ${PLAIN}")
             read -p "${CHOICE}" INPUT
             [[ -z "${INPUT}" ]] && INPUT=Y
@@ -414,12 +458,14 @@ function ChooseMirrors() {
                 echo -e "\n$WARN 输入错误,默认不使用内网地址!"
                 ;;
             esac
+        elif [[ "${USE_INTRANET_SOURCE}" == "true" ]]; then
+            SOURCE="${intranet_source}"
         fi
     }
 
     function Title() {
         local system_name="${SYSTEM_PRETTY_NAME:-"${SYSTEM_NAME} ${SYSTEM_VERSION_NUMBER}"}"
-        local arch="${DEVICE_ARCH}"
+        local arch=""${DEVICE_ARCH}""
         local date="$(date "+%Y-%m-%d %H:%M:%S")"
         local timezone="$(timedatectl status 2>/dev/null | grep "Time zone" | awk -F ':' '{print$2}' | awk -F ' ' '{print$1}')"
 
@@ -469,7 +515,7 @@ function ChooseMirrors() {
 ## 选择同步软件源所使用的 WEB 协议( HTTP:80 端口,HTTPS:443 端口)
 function ChooseWebProtocol() {
     if [[ -z "${WEB_PROTOCOL}" ]]; then
-        if [[ ${ONLY_HTTP} == "True" ]]; then
+        if [[ "${ONLY_HTTP}" == "True" ]]; then
             WEB_PROTOCOL="http"
         else
             local CHOICE=$(echo -e "\n${BOLD}└─ 软件源是否使用 HTTP 协议? [Y/n] ${PLAIN}")
@@ -494,40 +540,47 @@ function ChooseWebProtocol() {
 
 # 适用于 RHEL/CentOS(Stream)/RockyLinux 的 EPEL 附加软件包(安装/换源)
 function ChooseInstallEPEL() {
-    if [[ -z "${INSTALL_EPEL}" ]]; then
-        case "${SYSTEM_JUDGMENT}" in
-        "${SYSTEM_RHEL}" | "${SYSTEM_CENTOS}" | "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMA}")
-            ## 判断是否已安装 EPEL 软件包
-            rpm -qa | grep epel-release -q
-            VERIFICATION_EPEL=$?
-            ## 判断 /etc/yum.repos.d 目录下是否存在 epel 附加软件包 repo 源文件
-            [ -d $Dir_RedHatRepos ] && ls $Dir_RedHatRepos | grep epel -q
-            VERIFICATION_EPELFILES=$?
-            ## 判断 /etc/yum.repos.d.bak 目录下是否存在 epel 附加软件包 repo 源文件
-            [ -d $Dir_RedHatReposBackup ] && ls $Dir_RedHatReposBackup | grep epel -q
-            VERIFICATION_EPELBACKUPFILES=$?
+    function Check() {
+        ## 判断是否已安装 EPEL 软件包
+        rpm -qa | grep epel-release -q
+        VERIFICATION_EPEL=$?
+        ## 判断 /etc/yum.repos.d 目录下是否存在 epel 附加软件包 repo 源文件
+        [ -d $Dir_RedHatRepos ] && ls $Dir_RedHatRepos | grep epel -q
+        VERIFICATION_EPELFILES=$?
+        ## 判断 /etc/yum.repos.d.bak 目录下是否存在 epel 附加软件包 repo 源文件
+        [ -d $Dir_RedHatReposBackup ] && ls $Dir_RedHatReposBackup | grep epel -q
+        VERIFICATION_EPELBACKUPFILES=$?
+    }
 
-            if [ ${VERIFICATION_EPEL} -eq 0 ]; then
-                local CHOICE=$(echo -e "\n${BOLD}└─ 检测到系统已安装 EPEL 附加软件包,是否替换/覆盖软件源? [Y/n] ${PLAIN}")
-            else
-                local CHOICE=$(echo -e "\n${BOLD}└─ 是否安装 EPEL 附加软件包? [Y/n] ${PLAIN}")
-            fi
-            read -p "${CHOICE}" INPUT
-            [[ -z "${INPUT}" ]] && INPUT=Y
-            case "${INPUT}" in
-            [Yy] | [Yy][Ee][Ss])
-                INSTALL_EPEL="True"
-                ;;
-            [Nn] | [Nn][Oo])
-                INSTALL_EPEL="False"
-                ;;
-            *)
-                echo -e "\n$WARN 输入错误,默认不更换!"
-                INSTALL_EPEL="False"
+    if [[ "${SYSTEM_FACTIONS}" == "${SYSTEM_REDHAT}" ]]; then
+        if [[ -z "${INSTALL_EPEL}" ]]; then
+            case "${SYSTEM_JUDGMENT}" in
+            "${SYSTEM_RHEL}" | "${SYSTEM_CENTOS}" | "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMA}")
+                Check
+                if [ ${VERIFICATION_EPEL} -eq 0 ]; then
+                    local CHOICE=$(echo -e "\n${BOLD}└─ 检测到系统已安装 EPEL 附加软件包,是否替换/覆盖软件源? [Y/n] ${PLAIN}")
+                else
+                    local CHOICE=$(echo -e "\n${BOLD}└─ 是否安装 EPEL 附加软件包? [Y/n] ${PLAIN}")
+                fi
+                read -p "${CHOICE}" INPUT
+                [[ -z "${INPUT}" ]] && INPUT=Y
+                case "${INPUT}" in
+                [Yy] | [Yy][Ee][Ss])
+                    INSTALL_EPEL="True"
+                    ;;
+                [Nn] | [Nn][Oo])
+                    INSTALL_EPEL="False"
+                    ;;
+                *)
+                    echo -e "\n$WARN 输入错误,默认不更换!"
+                    INSTALL_EPEL="False"
+                    ;;
+                esac
                 ;;
             esac
-            ;;
-        esac
+        elif [[ "${INSTALL_EPEL}" == "true" ]]; then
+            Check
+        fi
     fi
 }
 
@@ -540,8 +593,8 @@ function CloseFirewall() {
     }
 
     if [ -x /usr/bin/systemctl ]; then
-        if [[ $(systemctl is-active firewalld) == "active" ]]; then
-            if [[ ${CLOSE_FIREWALL} == "true" ]]; then
+        if [[ "$(systemctl is-active firewalld)" == "active" ]]; then
+            if [[ "${CLOSE_FIREWALL}" == "true" ]]; then
                 Main
             elif [[ -z "${CLOSE_FIREWALL}" ]]; then
                 local CHOICE=$(echo -e "\n${BOLD}└─ 是否关闭防火墙和 SELinux ? [Y/n] ${PLAIN}")
@@ -563,7 +616,7 @@ function CloseFirewall() {
 
 ## 备份原有软件源
 function BackupOriginMirrors() {
-    if [[ $BACKUP == "true" || -z "${BACKUP}" ]]; then
+    if [[ "${BACKUP}" == "true" ]]; then
         local VERIFICATION_FILES=1
         local VERIFICATION_BACKUPFILES=1
 
@@ -607,7 +660,7 @@ function BackupOriginMirrors() {
             ## /etc/apt/sources.list
             if [ -s $File_DebianSourceList ]; then
                 if [ -s $File_DebianSourceListBackup ]; then
-                    if [[ -z "${IGNORE_BACKUP_TIPS}" ]]; then
+                    if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then
                         local CHOICE_BACKUP1=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的 list 源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
                         read -p "${CHOICE_BACKUP1}" INPUT
                         [[ -z "${INPUT}" ]] && INPUT=Y
@@ -636,7 +689,7 @@ function BackupOriginMirrors() {
             ## /etc/apt/sources.list.d
             if [ -d $Dir_DebianExtendSource ] && [ ${VERIFICATION_FILES} -eq 0 ]; then
                 if [ -d $Dir_DebianExtendSourceBackup ] && [ ${VERIFICATION_BACKUPFILES} -eq 0 ]; then
-                    if [[ -z "${IGNORE_BACKUP_TIPS}" ]]; then
+                    if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then
                         local CHOICE_BACKUP2=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的 list 扩展源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
                         read -p "${CHOICE_BACKUP2}" INPUT
                         [[ -z "${INPUT}" ]] && INPUT=Y
@@ -664,7 +717,7 @@ function BackupOriginMirrors() {
             ## /etc/yum.repos.d
             if [ ${VERIFICATION_FILES} -eq 0 ]; then
                 if [ -d $Dir_RedHatReposBackup ] && [ ${VERIFICATION_BACKUPFILES} -eq 0 ]; then
-                    if [[ -z "${IGNORE_BACKUP_TIPS}" ]]; then
+                    if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then
                         local CHOICE_BACKUP3=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的 repo 源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
                         read -p "${CHOICE_BACKUP3}" INPUT
                         [[ -z "${INPUT}" ]] && INPUT=Y
@@ -694,7 +747,7 @@ function BackupOriginMirrors() {
             ## /etc/yum.repos.d
             if [ ${VERIFICATION_FILES} -eq 0 ]; then
                 if [ -d $Dir_openEulerReposBackup ] && [ ${VERIFICATION_BACKUPFILES} -eq 0 ]; then
-                    if [[ -z "${IGNORE_BACKUP_TIPS}" ]]; then
+                    if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then
                         local CHOICE_BACKUP4=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的 repo 源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
                         read -p "${CHOICE_BACKUP4}" INPUT
                         [[ -z "${INPUT}" ]] && INPUT=Y
@@ -724,7 +777,7 @@ function BackupOriginMirrors() {
             ## /etc/zypp/repos.d
             if [ ${VERIFICATION_FILES} -eq 0 ]; then
                 if [ -d $Dir_openSUSEReposBackup ] && [ ${VERIFICATION_BACKUPFILES} -eq 0 ]; then
-                    if [[ -z "${IGNORE_BACKUP_TIPS}" ]]; then
+                    if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then
                         local CHOICE_BACKUP4=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的 repo 源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
                         read -p "${CHOICE_BACKUP4}" INPUT
                         [[ -z "${INPUT}" ]] && INPUT=Y
@@ -754,7 +807,7 @@ function BackupOriginMirrors() {
             ## /etc/pacman.d/mirrorlist
             if [ -s $File_ArchMirrorList ]; then
                 if [ -s $File_ArchMirrorListBackup ]; then
-                    if [[ -z "${IGNORE_BACKUP_TIPS}" ]]; then
+                    if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then
                         local CHOICE_BACKUP5=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的软件源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
                         read -p "${CHOICE_BACKUP5}" INPUT
                         [[ -z "${INPUT}" ]] && INPUT=Y
@@ -793,15 +846,20 @@ function RemoveOriginMirrors() {
     "${SYSTEM_REDHAT}")
         if [ -d $Dir_RedHatRepos ]; then
             # Fedora Linux 特殊,只删除以 fedora 开头的文件
-            if [[ "${SYSTEM_JUDGMENT}" == "${SYSTEM_FEDORA}" ]]; then
+            case "${SYSTEM_JUDGMENT}" in
+            "${SYSTEM_FEDORA}")
                 rm -rf $Dir_RedHatRepos/fedora*
-            else
-                if [ -f $Dir_RedHatRepos/epel.repo ]; then
-                    ls $Dir_RedHatRepos/ | egrep -v epel | xargs rm -rf
-                else
-                    rm -rf $Dir_RedHatRepos/*
+                ;;
+            *)
+                if [[ "${ONLY_EPEL}" == "false" ]]; then
+                    if [ -f $Dir_RedHatRepos/epel.repo ]; then
+                        ls $Dir_RedHatRepos/ | egrep -v epel | xargs rm -rf
+                    else
+                        rm -rf $Dir_RedHatRepos/*
+                    fi
                 fi
-            fi
+                ;;
+            esac
         fi
         ;;
     "${SYSTEM_OPENEULER}")
@@ -902,7 +960,7 @@ function UpdateSoftware() {
         [Yy] | [Yy][Ee][Ss]) ;;
         [Nn] | [Nn][Oo])
             Main
-            if [[ ${CLEAN_CACHE} == "true" ]]; then
+            if [[ "${CLEAN_CACHE}" == "true" ]]; then
                 CleanCache
             elif [[ -z "${CLEAN_CACHE}" ]]; then
                 CleanCacheInteraction
@@ -931,9 +989,9 @@ function UpdateSoftware() {
     case "${SYSTEM_FACTIONS}" in
     "${SYSTEM_DEBIAN}" | "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENSUSE}")
         if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_RHEL}" ]]; then
-            if [[ ${UPDATA_SOFTWARE} == "true" ]]; then
+            if [[ "${UPDATA_SOFTWARE}" == "true" ]]; then
                 Main
-                if [[ ${CLEAN_CACHE} == "true" ]]; then
+                if [[ "${CLEAN_CACHE}" == "true" ]]; then
                     CleanCache
                 elif [[ -z "${CLEAN_CACHE}" ]]; then
                     CleanCacheInteraction
@@ -948,8 +1006,7 @@ function UpdateSoftware() {
 
 ## 运行结束
 function RunEnd() {
-    echo -e "\n$COMPLETE 脚本执行结束\n"
-    AuthorSignature
+    echo -e "\n$COMPLETE 脚本执行结束 [\033[1;34m官网\033[0m] ${WEBSITE}\n"
 }
 
 ##############################################################################
@@ -976,19 +1033,19 @@ deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-updates ${source_suffix}
 # deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-updates ${source_suffix}
 deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-backports ${source_suffix}
 # deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-backports ${source_suffix}" >>$File_DebianSourceList
-        if [[ ${USE_ABROAD_SOURCE} == "true" ]]; then
-            echo "# deb ${basic_url}-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-# # deb-src ${basic_url}-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-
-deb https://security.debian.org/debian-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-# deb-src https://security.debian.org/debian-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}" >>$File_DebianSourceList
+        ## 处理 debian-security 仓库
+        local security_url="${SOURCE_SECURITY:-"${SOURCE}"}"
+        if [[ -z "${SOURCE_SECURITY}" ]]; then
+            if [[ "${USE_ABROAD_SOURCE}" == "true" ]]; then
+                local security_url="https://security.debian.org/${SOURCE_BRANCH_SECURITY:-"${SOURCE_BRANCH}-security"}"
+            else
+                local security_url="${WEB_PROTOCOL}://${SOURCE}/${SOURCE_BRANCH_SECURITY:-"${SOURCE_BRANCH}-security"}"
+            fi
         else
-            echo "deb ${basic_url}-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-# deb-src ${basic_url}-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-
-# deb https://security.debian.org/debian-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-# # deb-src https://security.debian.org/debian-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}" >>$File_DebianSourceList
+            local security_url="${WEB_PROTOCOL}://${SOURCE_SECURITY}/${SOURCE_BRANCH_SECURITY:-"${SOURCE_BRANCH}-security"}"
         fi
+        echo "deb ${security_url} ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
+# deb-src ${security_url} ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}" >>$File_DebianSourceList
         ;;
     "${SYSTEM_UBUNTU}")
         source_suffix="main restricted universe multiverse"
@@ -1002,9 +1059,6 @@ deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-backports ${source_suffix}
 deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
 # deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
 
-# deb http://security.ubuntu.com/ubuntu ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-# # deb-src http://security.ubuntu.com/ubuntu ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-
 ## 预发布软件源(不建议启用)
 # deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-proposed ${source_suffix}
 # deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-proposed ${source_suffix}" >>$File_DebianSourceList
@@ -1033,8 +1087,6 @@ function RedHatMirrors() {
         ## 生成 repo 源文件
         GenRepoFiles_EPEL
 
-        sed -i 's|^metalink=|#metalink=|g' $Dir_RedHatRepos/epel*
-
         # 更换 WEB 协议(HTTP/HTTPS)
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         9 | 8)
@@ -1045,6 +1097,7 @@ function RedHatMirrors() {
             ;;
         esac
         # 修改源
+        sed -i 's|^metalink=|#metalink=|g' $Dir_RedHatRepos/epel*
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         9)
             sed -i "s|download.example/pub|${SOURCE}|g" $Dir_RedHatRepos/epel*
@@ -1054,7 +1107,11 @@ function RedHatMirrors() {
             ;;
         esac
     }
-
+    ## 仅 EPEL 模式
+    if [[ "${ONLY_EPEL}" == "true" ]]; then
+        EPELMirrors
+        return
+    fi
     ## 生成基于 RedHat 发行版和及其衍生发行版的官方 repo 源文件
     case "${SYSTEM_JUDGMENT}" in
     "${SYSTEM_RHEL}")
@@ -1090,77 +1147,55 @@ function RedHatMirrors() {
     "${SYSTEM_RHEL}")
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         9)
-            sed -i 's|^mirrorlist=|#mirrorlist=|g' \
-                rocky.repo \
-                rocky-addons.repo \
-                rocky-devel.repo \
-                rocky-extras.repo
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
-                rocky.repo \
-                rocky-addons.repo \
-                rocky-devel.repo \
-                rocky-extras.repo
-            ## 禁用签名
-            sed -i "s|^gpgcheck=1|gpgcheck=0|g" \
-                rocky.repo \
-                rocky-addons.repo \
-                rocky-devel.repo \
-                rocky-extras.repo
-            sed -i "s|^gpgkey=|#gpgkey=|g" \
-                rocky.repo \
-                rocky-addons.repo \
-                rocky-devel.repo \
-                rocky-extras.repo
             # wget "${WEB_PROTOCOL}://${SOURCE}/${SOURCE_BRANCH}/RPM-GPG-KEY-rockyofficial" -P /etc/pki/rpm-gpg
             # wget "${WEB_PROTOCOL}://${SOURCE}/${SOURCE_BRANCH}/RPM-GPG-KEY-Rocky-9" -P /etc/pki/rpm-gpg
-
-            # 更换软件源
-            sed -i "s|dl.rockylinux.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" \
+            sed -e "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|^mirrorlist=|#mirrorlist=|g" \
+                -e "s|^gpgcheck=1|gpgcheck=0|g" \
+                -e "s|^gpgkey=|#gpgkey=|g" \
+                -e "s|dl.rockylinux.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" \
+                -i \
                 rocky.repo \
                 rocky-addons.repo \
                 rocky-devel.repo \
                 rocky-extras.repo
             ;;
         *)
+            sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" CentOS-*
             sed -i 's|^mirrorlist=|#mirrorlist=|g' CentOS-*
-
-            # Red Hat Enterprise Linux 修改版本号
             case ${SYSTEM_VERSION_NUMBER:0:1} in
             8)
-                ## CentOS 8 操作系统版本结束了生命周期(EOL),Linux 社区已不再维护该操作系统版本,最终版本为 8.5.2011
-                # 原 centos 镜像中的 CentOS 8 相关内容已被官方移动,从 2022-02 开始切换至 centos-vault 源
                 sed -i 's|mirror.centos.org/$contentdir|mirror.centos.org/centos-vault|g' CentOS-*
-                sed -i 's|vault.centos.org/$contentdir|mirror.centos.org/centos-vault|g' CentOS-Sources.repo # 单独处理 CentOS-Sources.repo
                 sed -i "s/\$releasever/8.5.2111/g" CentOS-*
+                # 单独处理 CentOS-Linux-Sources.repo
+                sed -i "s|vault.centos.org/\$contentdir|${SOURCE_VAULT:-"mirror.centos.org"}/${SOURCE_BRANCH_VAULT:-"centos-vault"}|g" CentOS-Linux-Sources.repo
                 ;;
             7)
+                sed -i "s|mirror.centos.org/\$contentdir|mirror.centos.org/${SOURCE_BRANCH}|g" CentOS-*
                 sed -i "s/\$releasever/7/g" CentOS-*
+                # 单独处理 CentOS-Sources.repo
+                sed -i "s|vault.centos.org/centos|${SOURCE_VAULT:-"mirror.centos.org"}/${SOURCE_BRANCH_VAULT:-"centos"}|g" CentOS-Sources.repo
                 ;;
             esac
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" CentOS-*
-            # 更换软件源
             sed -i "s|mirror.centos.org|${SOURCE}|g" CentOS-*
             ;;
         esac
         ;;
     "${SYSTEM_CENTOS}")
-        sed -i 's|^mirrorlist=|#mirrorlist=|g' CentOS-*
-
-        # 更换 WEB 协议(HTTP/HTTPS)
         sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" CentOS-*
-        # 更换软件源
+        sed -i 's|^mirrorlist=|#mirrorlist=|g' CentOS-*
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         8)
+            ## CentOS 8 操作系统版本结束了生命周期(EOL),Linux 社区已不再维护该操作系统版本,最终版本为 8.5.2011
+            # 原 centos 镜像中的 CentOS 8 相关内容已被官方移动,从 2022-02 开始切换至 centos-vault 源
             sed -i 's|mirror.centos.org/$contentdir|mirror.centos.org/centos-vault|g' CentOS-*
-            sed -i 's|vault.centos.org/$contentdir|mirror.centos.org/centos-vault|g' CentOS-Sources.repo # 单独处理 CentOS-Sources.repo
             sed -i "s/\$releasever/8.5.2111/g" CentOS-*
+            # 单独处理 CentOS-Linux-Sources.repo
+            sed -i "s|vault.centos.org/\$contentdir|${SOURCE_VAULT:-"mirror.centos.org"}/${SOURCE_BRANCH_VAULT:-"centos-vault"}|g" CentOS-Linux-Sources.repo
             ;;
         7)
             sed -i "s|mirror.centos.org/\$contentdir|mirror.centos.org/${SOURCE_BRANCH}|g" CentOS-*
+            sed -i "s|vault.centos.org/centos|${SOURCE_VAULT:-"mirror.centos.org"}/${SOURCE_BRANCH_VAULT:-"centos"}|g" CentOS-Sources.repo # 单独处理 CentOS-Sources.repo
             ;;
         esac
         sed -i "s|mirror.centos.org|${SOURCE}|g" CentOS-*
@@ -1169,99 +1204,58 @@ function RedHatMirrors() {
         # CentOS Stream 9 使用的是 centos-stream 镜像,而 CentOS Stream 8 使用的是 centos 镜像
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         9)
-            sed -i 's|^metalink=|#metalink=|g' \
-                centos.repo \
-                centos-addons.repo
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^#baseurl=https|baseurl=${WEB_PROTOCOL}|g" \
-                centos.repo \
-                centos-addons.repo
-            # 更换软件源
-            sed -i "s|mirror.stream.centos.org|${SOURCE}/${SOURCE_BRANCH}|g" \
+            sed -e "s|^#baseurl=https|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|^metalink=|#metalink=|g" \
+                -e "s|mirror.stream.centos.org|${SOURCE}/${SOURCE_BRANCH}|g" \
+                -i \
                 centos.repo \
                 centos-addons.repo
             ;;
         8)
-            sed -i 's|^mirrorlist=|#mirrorlist=|g' CentOS-Stream-*
-            sed -i 's|vault.centos.org/$contentdir|mirror.centos.org/centos-vault|g' CentOS-Stream-Sources.repo # 单独处理 CentOS-Stream-Sources.repo
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" CentOS-Stream-*
-            # 更换软件源
-            sed -i "s|mirror.centos.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" CentOS-Stream-*
+            sed -i "s|vault.centos.org/\$contentdir|${SOURCE_VAULT:-"mirror.centos.org"}/${SOURCE_BRANCH_VAULT:-"centos"}|g" CentOS-Stream-Sources.repo # 单独处理 CentOS-Stream-Sources.repo
+            sed -e "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|^mirrorlist=|#mirrorlist=|g" \
+                -e "s|mirror.centos.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" \
+                -i \
+                CentOS-Stream-*
             ;;
         esac
         ;;
     "${SYSTEM_ROCKY}")
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         9)
-            sed -i 's|^mirrorlist=|#mirrorlist=|g' \
-                rocky.repo \
-                rocky-addons.repo \
-                rocky-devel.repo \
-                rocky-extras.repo
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
-                rocky.repo \
-                rocky-addons.repo \
-                rocky-devel.repo \
-                rocky-extras.repo
-            # 更换软件源
-            sed -i "s|dl.rockylinux.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" \
+            sed -e "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|^mirrorlist=|#mirrorlist=|g" \
+                -e "s|dl.rockylinux.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" \
+                -i \
                 rocky.repo \
                 rocky-addons.repo \
                 rocky-devel.repo \
                 rocky-extras.repo
             ;;
         8)
-            sed -i 's|^mirrorlist=|#mirrorlist=|g' Rocky-*
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" Rocky-*
-            # 更换软件源
-            sed -i "s|dl.rockylinux.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" Rocky-*
+            sed -e "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|^mirrorlist=|#mirrorlist=|g" \
+                -e "s|dl.rockylinux.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" \
+                -i \
+                Rocky-*
             ;;
         esac
         ;;
     "${SYSTEM_ALMA}")
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         9)
-            sed -i 's|^mirrorlist=|#mirrorlist=|g' almalinux-*
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^# baseurl=http|baseurl=${WEB_PROTOCOL}|g" almalinux-*
-            # 更换软件源
-            sed -e "s|repo.almalinux.org/almalinux|${SOURCE}/${SOURCE_BRANCH}|g" \
+            sed -e "s|^# baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|^mirrorlist=|#mirrorlist=|g" \
+                -e "s|repo.almalinux.org/almalinux|${SOURCE}/${SOURCE_BRANCH}|g" \
                 -e "s|repo.almalinux.org/vault|${SOURCE}/${SOURCE_BRANCH}-vault|g" \
-                -i almalinux-*
+                -i \
+                almalinux-*
             ;;
         8)
-            sed -i 's|^mirrorlist=|#mirrorlist=|g' \
-                almalinux-ha.repo \
-                almalinux-nfv.repo \
-                almalinux-plus.repo \
-                almalinux-powertools.repo \
-                almalinux-resilientstorage.repo \
-                almalinux-rt.repo \
-                almalinux-sap.repo \
-                almalinux-saphana.repo \
-                almalinux.repo
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^# baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
-                almalinux-ha.repo \
-                almalinux-nfv.repo \
-                almalinux-plus.repo \
-                almalinux-powertools.repo \
-                almalinux-resilientstorage.repo \
-                almalinux-rt.repo \
-                almalinux-sap.repo \
-                almalinux-saphana.repo \
-                almalinux.repo
-            # 更换软件源
-            sed -e "s|repo.almalinux.org/almalinux|${SOURCE}/${SOURCE_BRANCH}|g" \
+            sed -e "s|^mirrorlist=|#mirrorlist=|g" \
+                -e "s|^# baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|repo.almalinux.org/almalinux|${SOURCE}/${SOURCE_BRANCH}|g" \
                 -e "s|repo.almalinux.org/vault|${SOURCE}/${SOURCE_BRANCH}-vault|g" \
                 -i \
                 almalinux-ha.repo \
@@ -1277,24 +1271,10 @@ function RedHatMirrors() {
         esac
         ;;
     "${SYSTEM_FEDORA}")
-        sed -i 's|^metalink=|#metalink=|g' \
-            fedora.repo \
-            fedora-updates.repo \
-            fedora-modular.repo \
-            fedora-updates-modular.repo \
-            fedora-updates-testing.repo \
-            fedora-updates-testing-modular.repo
-
-        # 更换 WEB 协议(HTTP/HTTPS)
-        sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
-            fedora.repo \
-            fedora-updates.repo \
-            fedora-modular.repo \
-            fedora-updates-modular.repo \
-            fedora-updates-testing.repo \
-            fedora-updates-testing-modular.repo
-        # 更换软件源
-        sed -i "s|download.example/pub/fedora/linux|${SOURCE}/${SOURCE_BRANCH}|g" \
+        sed -e "s|^metalink=|#metalink=|g" \
+            -e "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+            -e "s|download.example/pub/fedora/linux|${SOURCE}/${SOURCE_BRANCH}|g" \
+            -i \
             fedora.repo \
             fedora-updates.repo \
             fedora-modular.repo \
@@ -1307,7 +1287,7 @@ function RedHatMirrors() {
     ## EPEL 附加软件包(安装/换源)
     case "${SYSTEM_JUDGMENT}" in
     "${SYSTEM_RHEL}" | "${SYSTEM_CENTOS}" | "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMA}")
-        [[ ${INSTALL_EPEL} == "True" ]] && EPELMirrors
+        [[ "${INSTALL_EPEL}" == "True" ]] && EPELMirrors
         ;;
     esac
 }
@@ -1317,10 +1297,10 @@ function openEulerMirrors() {
     GenRepoFiles_openEuler
     cd $Dir_openEulerRepos
 
-    # 更换 WEB 协议(HTTP/HTTPS)
-    sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" openEuler.repo
-    # 更换软件源
-    sed -i "s|repo.openeuler.org|${SOURCE}/${SOURCE_BRANCH}|g" openEuler.repo
+    sed -e "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+        -e "s|repo.openeuler.org|${SOURCE}/${SOURCE_BRANCH}|g" \
+        -i \
+        openEuler.repo
 }
 
 ## 更换基于 openSUSE 发行版的软件源
@@ -3955,7 +3935,7 @@ EOF
 ## 生成 openSUSE 官方 repo 源文件
 function GenRepoFiles_openSUSE() {
     case $1 in
-    leap)
+    "leap")
         case $2 in
         15.[0-2])
             cat >$Dir_openSUSERepos/repo-debug-non-oss.repo <<\EOF
@@ -4168,7 +4148,7 @@ EOF
             ;;
         esac
         ;;
-    tumbleweed)
+    "tumbleweed")
         cat >$Dir_openSUSERepos/repo-debug.repo <<\EOF
 [repo-debug]
 name=openSUSE-Tumbleweed-Debug
@@ -4495,26 +4475,26 @@ function CommandOptions() {
         echo -e "
 选项命令(参数名/含义/参数值):
 
-  --source                 指定软件源地址           地址
-  --branch                 指定软件源分支           分支名
-  --abroad                 使用海外软件源           无
-  --web-protocol           指定 WEB 协议            http 或 https
-  --intranet               使用内网地址             true 或 false
-  --install-epel           安装 EPEL 附加软件包     true 或 false
-  --close-firewall         关闭防火墙               true 或 false
-  --backup                 备份原有软件源           true 或 false
-  --ignore-backup-tips     忽略覆盖备份提示         无
-  --updata-software        更新软件包               true 或 false
-  --clean-cache            清理下载缓存             true 或 false
-  
+  --source                 指定软件源地址                          地址
+  --source-security        指定 debian-security 软件源地址         地址
+  --source-vault           指定 centos-vault 软件源地址            地址
+  --branch                 指定软件源分支(路径)                    分支名
+  --branch-security        指定 debian-security 软件源分支(路径)   分支名
+  --branch-vault           指定 centos-vault 软件源分支(路径)      分支名
+  --abroad                 使用海外软件源                          无
+  --web-protocol           指定 WEB 协议                           http 或 https
+  --intranet               优先使用内网地址                        true 或 false
+  --install-epel           安装 EPEL 附加软件包                    true 或 false
+  --only-epel              仅更换 EPEL 软件源模式                  无
+  --close-firewall         关闭防火墙                              true 或 false
+  --backup                 备份原有软件源                          true 或 false
+  --ignore-backup-tips     忽略覆盖备份提示                        无
+  --updata-software        更新软件包                              true 或 false
+  --clean-cache            清理下载缓存                            true 或 false
+
 问题报告 https://github.com/SuperManito/LinuxMirrors/issues
   "
     }
-    ## 报错退出
-    function Output_Command_Error() {
-        echo -e "\n$ERROR $1\n"
-        exit 1
-    }
 
     ## 判断参数
     while [ $# -gt 0 ]; do
@@ -4528,13 +4508,39 @@ function CommandOptions() {
             if [ $2 ]; then
                 echo "$2" | grep -Eq "\-|\(|\)|\[|\]|\{|\}"
                 if [ $? -eq 0 ]; then
-                    Output_Command_Error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!"
+                    Output_Error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!"
                 else
                     SOURCE="$2"
                     shift
                 fi
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
+            fi
+            ;;
+        --source-security)
+            if [ $2 ]; then
+                echo "$2" | grep -Eq "\-|\(|\)|\[|\]|\{|\}"
+                if [ $? -eq 0 ]; then
+                    Output_Error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!"
+                else
+                    SOURCE_SECURITY="$2"
+                    shift
+                fi
+            else
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
+            fi
+            ;;
+        --source-vault)
+            if [ $2 ]; then
+                echo "$2" | grep -Eq "\-|\(|\)|\[|\]|\{|\}"
+                if [ $? -eq 0 ]; then
+                    Output_Error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!"
+                else
+                    SOURCE_VAULT="$2"
+                    shift
+                fi
+            else
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
             fi
             ;;
         ## 指定软件源分支
@@ -4543,7 +4549,23 @@ function CommandOptions() {
                 SOURCE_BRANCH="$2"
                 shift
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
+            fi
+            ;;
+        --branch-security)
+            if [ $2 ]; then
+                SOURCE_BRANCH_SECURITY="$2"
+                shift
+            else
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
+            fi
+            ;;
+        --branch-vault)
+            if [ $2 ]; then
+                SOURCE_BRANCH_VAULT="$2"
+                shift
+            else
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
             fi
             ;;
         ## 优先使用内网地址
@@ -4555,11 +4577,11 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
             fi
             ;;
         ## WEB 协议(HTTP/HTTPS)
@@ -4571,11 +4593,11 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 http 或 https 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 http 或 https 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 WEB 协议(HTTP/HTTPS)!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 WEB 协议(HTTP/HTTPS)!"
             fi
             ;;
         ## 安装 EPEL 附加软件包
@@ -4587,13 +4609,17 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
             fi
             ;;
+        --only-epel)
+            ONLY_EPEL="true"
+            INSTALL_EPEL="true"
+            ;;
         ## 关闭防火墙
         --close-firewall)
             if [ $2 ]; then
@@ -4603,11 +4629,11 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
             fi
             ;;
         ## 备份原有软件源
@@ -4619,11 +4645,11 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
             fi
             ;;
         ## 忽略覆盖备份提示
@@ -4639,11 +4665,11 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
             fi
             ;;
         ## 清理下载缓存
@@ -4655,11 +4681,11 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
             fi
             ;;
         --help)
@@ -4667,11 +4693,15 @@ function CommandOptions() {
             exit
             ;;
         *)
-            Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请确认后重新输入!"
+            Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请确认后重新输入!"
             ;;
         esac
         shift
     done
+    ## 赋予部分命令参数默认值
+    ONLY_EPEL="${ONLY_EPEL:-"false"}"
+    BACKUP="${BACKUP:-"true"}"
+    IGNORE_BACKUP_TIPS="${IGNORE_BACKUP_TIPS:-"false"}"
 }
 
 ## 组合函数
diff --git a/README.md b/README.md
index 4a294a0..37ae962 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@
   
 
 
-- ### 适配系统及版本号
+- ### 适配系统及其版本
 
   
   
diff --git a/docs/index.md b/docs/index.md
index c86716b..1fdbd3d 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -8,7 +8,7 @@ hide:
 
 GNU/Linux 一键更换系统软件源脚本 · 让换源更简单
 
-## 适配系统及版本号
+## 适配系统及其版本
 
 !!! example inline end "适配计划"
 
diff --git a/docs/main.sh b/docs/main.sh
index 910388d..99a1db5 100644
--- a/docs/main.sh
+++ b/docs/main.sh
@@ -175,18 +175,65 @@ function StartTitle() {
     echo -e ' 欢迎使用 GNU/Linux 一键更换软件源脚本'
 }
 
-function AuthorSignature() {
-    echo -e "[\033[1;34m官网\033[0m] ${WEBSITE}\n"
+## 报错退出
+function Output_Error() {
+    [ "$1" ] && echo -e "\n$ERROR $1\n"
+    exit 1
 }
 
 ## 权限判定
 function PermissionJudgment() {
     if [ $UID -ne 0 ]; then
-        echo -e "\n$ERROR 权限不足,请使用 Root 用户运行本脚本\n"
-        exit 1
+        Output_Error "权限不足,请使用 Root 用户运行本脚本"
     fi
 }
 
+## 命令选项兼容性判断
+function CheckCommandOptions() {
+    case "${SYSTEM_FACTIONS}" in
+    "${SYSTEM_DEBIAN}")
+        if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_DEBIAN}" ]]; then
+            if [[ "${SOURCE_SECURITY}" == "true" || "${SOURCE_BRANCH_SECURITY}" == "true" ]]; then
+                Output_Error "当前系统不支持使用 debian-security 仓库故无法使用相关参数,请确认后重试!"
+            fi
+        fi
+        if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then
+            Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!"
+        fi
+        ;;
+    "${SYSTEM_REDHAT}")
+        if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_CENTOS}" && "${SYSTEM_JUDGMENT}" != "${SYSTEM_RHEL}" ]]; then
+            if [[ "${SOURCE_VAULT}" == "true" || "${SOURCE_BRANCH_VAULT}" == "true" ]]; then
+                Output_Error "当前系统不支持使用 centos-vault 仓库故无法使用相关参数,请确认后重试!"
+            fi
+        fi
+        case "${SYSTEM_JUDGMENT}" in
+        "${SYSTEM_FEDORA}")
+            if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then
+                Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!"
+            fi
+            ;;
+        esac
+        ;;
+    "${SYSTEM_OPENEULER}")
+        if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then
+            Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!"
+        fi
+        ;;
+    "${SYSTEM_OPENSUSE}")
+        if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then
+            Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!"
+        fi
+        ;;
+    "${SYSTEM_ARCH}")
+        if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then
+            Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!"
+        fi
+        ;;
+    esac
+
+}
+
 ## 系统判定变量
 function EnvJudgment() {
     ## 定义系统名称
@@ -209,20 +256,15 @@ function EnvJudgment() {
     elif [[ "${SYSTEM_NAME}" == *"openSUSE"* ]]; then
         SYSTEM_FACTIONS="${SYSTEM_OPENSUSE}"
     else
-        echo -e "\n$ERROR 无法判断当前运行环境,请先确认本脚本是否已经适配当前操作系统\n"
-        exit 1
+        Output_Error "无法判断当前运行环境,请先确认本脚本是否已经适配当前操作系统"
     fi
-    ## 开始使用
-    StartTitle
     ## 判定系统名称、版本、版本号
     case "${SYSTEM_FACTIONS}" in
     "${SYSTEM_DEBIAN}")
         if [ ! -x /usr/bin/lsb_release ]; then
             apt-get install -y lsb-release
             if [ $? -ne 0 ]; then
-                echo -e "\n$ERROR lsb-release 软件包安装失败"
-                echo -e "\n本脚本需要通过 lsb_release 指令判断系统类型,当前可能为精简安装的系统,因为正常情况下系统会自带该软件包,请自行安装后重新执行脚本!\n"
-                exit 1
+                Output_Error "lsb-release 软件包安装失败\n本脚本需要通过 lsb_release 指令判断系统类型,当前可能为精简安装的系统,因为正常情况下系统会自带该软件包,请自行安装后重新执行脚本!"
             fi
         fi
         SYSTEM_JUDGMENT="$(lsb_release -is)"
@@ -272,7 +314,7 @@ function EnvJudgment() {
     if [[ -z "${SOURCE_BRANCH}" ]]; then
         ## 默认
         SOURCE_BRANCH="$(echo "${SYSTEM_JUDGMENT,,}" | sed "s/ /-/g")"
-        ## 定制
+        ## 处理特殊
         case "${SYSTEM_JUDGMENT}" in
         "${SYSTEM_RHEL}")
             case ${SYSTEM_VERSION_NUMBER:0:1} in
@@ -285,7 +327,7 @@ function EnvJudgment() {
             esac
             ;;
         "${SYSTEM_CENTOS}")
-            if [[ ${DEVICE_ARCH} == "x86_64" ]]; then
+            if [[ "${DEVICE_ARCH}" == "x86_64" ]]; then
                 SOURCE_BRANCH="centos"
             else
                 SOURCE_BRANCH="centos-altarch"
@@ -294,7 +336,7 @@ function EnvJudgment() {
         "${SYSTEM_CENTOS_STREAM}")
             case ${SYSTEM_VERSION_NUMBER:0:1} in
             8)
-                if [[ ${DEVICE_ARCH} == "x86_64" ]]; then
+                if [[ "${DEVICE_ARCH}" == "x86_64" ]]; then
                     SOURCE_BRANCH="centos"
                 else
                     SOURCE_BRANCH="centos-altarch"
@@ -306,14 +348,14 @@ function EnvJudgment() {
             esac
             ;;
         "${SYSTEM_UBUNTU}")
-            if [[ ${DEVICE_ARCH} == "x86_64" ]] || [[ ${DEVICE_ARCH} == *i?86* ]]; then
+            if [[ "${DEVICE_ARCH}" == "x86_64" ]] || [[ "${DEVICE_ARCH}" == *i?86* ]]; then
                 SOURCE_BRANCH="ubuntu"
             else
                 SOURCE_BRANCH="ubuntu-ports"
             fi
             ;;
         "${SYSTEM_ARCH}")
-            if [[ ${DEVICE_ARCH} == "x86_64" ]] || [[ ${DEVICE_ARCH} == *i?86* ]]; then
+            if [[ "${DEVICE_ARCH}" == "x86_64" ]] || [[ "${DEVICE_ARCH}" == *i?86* ]]; then
                 SOURCE_BRANCH="archlinux"
             else
                 SOURCE_BRANCH="archlinuxarm"
@@ -330,6 +372,10 @@ function EnvJudgment() {
         SYNC_TXT="同步"
         ;;
     esac
+    ## 命令选项兼容性判断
+    CheckCommandOptions
+    ## 开始使用
+    StartTitle
 }
 
 ## 选择软件源
@@ -398,9 +444,7 @@ function ChooseMirrors() {
                 continue
             fi
         done
-        if [[ ${USE_INTRANET_SOURCE} == "true" ]]; then
-            SOURCE="${intranet_source}"
-        elif [[ -z "${USE_INTRANET_SOURCE}" ]]; then
+        if [[ -z "${USE_INTRANET_SOURCE}" ]]; then
             local CHOICE=$(echo -e "\n${BOLD}└─ 默认使用软件源的公网地址,是否继续? [Y/n] ${PLAIN}")
             read -p "${CHOICE}" INPUT
             [[ -z "${INPUT}" ]] && INPUT=Y
@@ -414,12 +458,14 @@ function ChooseMirrors() {
                 echo -e "\n$WARN 输入错误,默认不使用内网地址!"
                 ;;
             esac
+        elif [[ "${USE_INTRANET_SOURCE}" == "true" ]]; then
+            SOURCE="${intranet_source}"
         fi
     }
 
     function Title() {
         local system_name="${SYSTEM_PRETTY_NAME:-"${SYSTEM_NAME} ${SYSTEM_VERSION_NUMBER}"}"
-        local arch="${DEVICE_ARCH}"
+        local arch=""${DEVICE_ARCH}""
         local date="$(date "+%Y-%m-%d %H:%M:%S")"
         local timezone="$(timedatectl status 2>/dev/null | grep "Time zone" | awk -F ':' '{print$2}' | awk -F ' ' '{print$1}')"
 
@@ -469,7 +515,7 @@ function ChooseMirrors() {
 ## 选择同步软件源所使用的 WEB 协议( HTTP:80 端口,HTTPS:443 端口)
 function ChooseWebProtocol() {
     if [[ -z "${WEB_PROTOCOL}" ]]; then
-        if [[ ${ONLY_HTTP} == "True" ]]; then
+        if [[ "${ONLY_HTTP}" == "True" ]]; then
             WEB_PROTOCOL="http"
         else
             local CHOICE=$(echo -e "\n${BOLD}└─ 软件源是否使用 HTTP 协议? [Y/n] ${PLAIN}")
@@ -494,40 +540,47 @@ function ChooseWebProtocol() {
 
 # 适用于 RHEL/CentOS(Stream)/RockyLinux 的 EPEL 附加软件包(安装/换源)
 function ChooseInstallEPEL() {
-    if [[ -z "${INSTALL_EPEL}" ]]; then
-        case "${SYSTEM_JUDGMENT}" in
-        "${SYSTEM_RHEL}" | "${SYSTEM_CENTOS}" | "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMA}")
-            ## 判断是否已安装 EPEL 软件包
-            rpm -qa | grep epel-release -q
-            VERIFICATION_EPEL=$?
-            ## 判断 /etc/yum.repos.d 目录下是否存在 epel 附加软件包 repo 源文件
-            [ -d $Dir_RedHatRepos ] && ls $Dir_RedHatRepos | grep epel -q
-            VERIFICATION_EPELFILES=$?
-            ## 判断 /etc/yum.repos.d.bak 目录下是否存在 epel 附加软件包 repo 源文件
-            [ -d $Dir_RedHatReposBackup ] && ls $Dir_RedHatReposBackup | grep epel -q
-            VERIFICATION_EPELBACKUPFILES=$?
+    function Check() {
+        ## 判断是否已安装 EPEL 软件包
+        rpm -qa | grep epel-release -q
+        VERIFICATION_EPEL=$?
+        ## 判断 /etc/yum.repos.d 目录下是否存在 epel 附加软件包 repo 源文件
+        [ -d $Dir_RedHatRepos ] && ls $Dir_RedHatRepos | grep epel -q
+        VERIFICATION_EPELFILES=$?
+        ## 判断 /etc/yum.repos.d.bak 目录下是否存在 epel 附加软件包 repo 源文件
+        [ -d $Dir_RedHatReposBackup ] && ls $Dir_RedHatReposBackup | grep epel -q
+        VERIFICATION_EPELBACKUPFILES=$?
+    }
 
-            if [ ${VERIFICATION_EPEL} -eq 0 ]; then
-                local CHOICE=$(echo -e "\n${BOLD}└─ 检测到系统已安装 EPEL 附加软件包,是否替换/覆盖软件源? [Y/n] ${PLAIN}")
-            else
-                local CHOICE=$(echo -e "\n${BOLD}└─ 是否安装 EPEL 附加软件包? [Y/n] ${PLAIN}")
-            fi
-            read -p "${CHOICE}" INPUT
-            [[ -z "${INPUT}" ]] && INPUT=Y
-            case "${INPUT}" in
-            [Yy] | [Yy][Ee][Ss])
-                INSTALL_EPEL="True"
-                ;;
-            [Nn] | [Nn][Oo])
-                INSTALL_EPEL="False"
-                ;;
-            *)
-                echo -e "\n$WARN 输入错误,默认不更换!"
-                INSTALL_EPEL="False"
+    if [[ "${SYSTEM_FACTIONS}" == "${SYSTEM_REDHAT}" ]]; then
+        if [[ -z "${INSTALL_EPEL}" ]]; then
+            case "${SYSTEM_JUDGMENT}" in
+            "${SYSTEM_RHEL}" | "${SYSTEM_CENTOS}" | "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMA}")
+                Check
+                if [ ${VERIFICATION_EPEL} -eq 0 ]; then
+                    local CHOICE=$(echo -e "\n${BOLD}└─ 检测到系统已安装 EPEL 附加软件包,是否替换/覆盖软件源? [Y/n] ${PLAIN}")
+                else
+                    local CHOICE=$(echo -e "\n${BOLD}└─ 是否安装 EPEL 附加软件包? [Y/n] ${PLAIN}")
+                fi
+                read -p "${CHOICE}" INPUT
+                [[ -z "${INPUT}" ]] && INPUT=Y
+                case "${INPUT}" in
+                [Yy] | [Yy][Ee][Ss])
+                    INSTALL_EPEL="True"
+                    ;;
+                [Nn] | [Nn][Oo])
+                    INSTALL_EPEL="False"
+                    ;;
+                *)
+                    echo -e "\n$WARN 输入错误,默认不更换!"
+                    INSTALL_EPEL="False"
+                    ;;
+                esac
                 ;;
             esac
-            ;;
-        esac
+        elif [[ "${INSTALL_EPEL}" == "true" ]]; then
+            Check
+        fi
     fi
 }
 
@@ -540,8 +593,8 @@ function CloseFirewall() {
     }
 
     if [ -x /usr/bin/systemctl ]; then
-        if [[ $(systemctl is-active firewalld) == "active" ]]; then
-            if [[ ${CLOSE_FIREWALL} == "true" ]]; then
+        if [[ "$(systemctl is-active firewalld)" == "active" ]]; then
+            if [[ "${CLOSE_FIREWALL}" == "true" ]]; then
                 Main
             elif [[ -z "${CLOSE_FIREWALL}" ]]; then
                 local CHOICE=$(echo -e "\n${BOLD}└─ 是否关闭防火墙和 SELinux ? [Y/n] ${PLAIN}")
@@ -563,7 +616,7 @@ function CloseFirewall() {
 
 ## 备份原有软件源
 function BackupOriginMirrors() {
-    if [[ $BACKUP == "true" || -z "${BACKUP}" ]]; then
+    if [[ "${BACKUP}" == "true" ]]; then
         local VERIFICATION_FILES=1
         local VERIFICATION_BACKUPFILES=1
 
@@ -607,7 +660,7 @@ function BackupOriginMirrors() {
             ## /etc/apt/sources.list
             if [ -s $File_DebianSourceList ]; then
                 if [ -s $File_DebianSourceListBackup ]; then
-                    if [[ -z "${IGNORE_BACKUP_TIPS}" ]]; then
+                    if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then
                         local CHOICE_BACKUP1=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的 list 源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
                         read -p "${CHOICE_BACKUP1}" INPUT
                         [[ -z "${INPUT}" ]] && INPUT=Y
@@ -636,7 +689,7 @@ function BackupOriginMirrors() {
             ## /etc/apt/sources.list.d
             if [ -d $Dir_DebianExtendSource ] && [ ${VERIFICATION_FILES} -eq 0 ]; then
                 if [ -d $Dir_DebianExtendSourceBackup ] && [ ${VERIFICATION_BACKUPFILES} -eq 0 ]; then
-                    if [[ -z "${IGNORE_BACKUP_TIPS}" ]]; then
+                    if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then
                         local CHOICE_BACKUP2=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的 list 扩展源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
                         read -p "${CHOICE_BACKUP2}" INPUT
                         [[ -z "${INPUT}" ]] && INPUT=Y
@@ -664,7 +717,7 @@ function BackupOriginMirrors() {
             ## /etc/yum.repos.d
             if [ ${VERIFICATION_FILES} -eq 0 ]; then
                 if [ -d $Dir_RedHatReposBackup ] && [ ${VERIFICATION_BACKUPFILES} -eq 0 ]; then
-                    if [[ -z "${IGNORE_BACKUP_TIPS}" ]]; then
+                    if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then
                         local CHOICE_BACKUP3=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的 repo 源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
                         read -p "${CHOICE_BACKUP3}" INPUT
                         [[ -z "${INPUT}" ]] && INPUT=Y
@@ -694,7 +747,7 @@ function BackupOriginMirrors() {
             ## /etc/yum.repos.d
             if [ ${VERIFICATION_FILES} -eq 0 ]; then
                 if [ -d $Dir_openEulerReposBackup ] && [ ${VERIFICATION_BACKUPFILES} -eq 0 ]; then
-                    if [[ -z "${IGNORE_BACKUP_TIPS}" ]]; then
+                    if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then
                         local CHOICE_BACKUP4=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的 repo 源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
                         read -p "${CHOICE_BACKUP4}" INPUT
                         [[ -z "${INPUT}" ]] && INPUT=Y
@@ -724,7 +777,7 @@ function BackupOriginMirrors() {
             ## /etc/zypp/repos.d
             if [ ${VERIFICATION_FILES} -eq 0 ]; then
                 if [ -d $Dir_openSUSEReposBackup ] && [ ${VERIFICATION_BACKUPFILES} -eq 0 ]; then
-                    if [[ -z "${IGNORE_BACKUP_TIPS}" ]]; then
+                    if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then
                         local CHOICE_BACKUP4=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的 repo 源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
                         read -p "${CHOICE_BACKUP4}" INPUT
                         [[ -z "${INPUT}" ]] && INPUT=Y
@@ -754,7 +807,7 @@ function BackupOriginMirrors() {
             ## /etc/pacman.d/mirrorlist
             if [ -s $File_ArchMirrorList ]; then
                 if [ -s $File_ArchMirrorListBackup ]; then
-                    if [[ -z "${IGNORE_BACKUP_TIPS}" ]]; then
+                    if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then
                         local CHOICE_BACKUP5=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的软件源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
                         read -p "${CHOICE_BACKUP5}" INPUT
                         [[ -z "${INPUT}" ]] && INPUT=Y
@@ -793,15 +846,20 @@ function RemoveOriginMirrors() {
     "${SYSTEM_REDHAT}")
         if [ -d $Dir_RedHatRepos ]; then
             # Fedora Linux 特殊,只删除以 fedora 开头的文件
-            if [[ "${SYSTEM_JUDGMENT}" == "${SYSTEM_FEDORA}" ]]; then
+            case "${SYSTEM_JUDGMENT}" in
+            "${SYSTEM_FEDORA}")
                 rm -rf $Dir_RedHatRepos/fedora*
-            else
-                if [ -f $Dir_RedHatRepos/epel.repo ]; then
-                    ls $Dir_RedHatRepos/ | egrep -v epel | xargs rm -rf
-                else
-                    rm -rf $Dir_RedHatRepos/*
+                ;;
+            *)
+                if [[ "${ONLY_EPEL}" == "false" ]]; then
+                    if [ -f $Dir_RedHatRepos/epel.repo ]; then
+                        ls $Dir_RedHatRepos/ | egrep -v epel | xargs rm -rf
+                    else
+                        rm -rf $Dir_RedHatRepos/*
+                    fi
                 fi
-            fi
+                ;;
+            esac
         fi
         ;;
     "${SYSTEM_OPENEULER}")
@@ -902,7 +960,7 @@ function UpdateSoftware() {
         [Yy] | [Yy][Ee][Ss]) ;;
         [Nn] | [Nn][Oo])
             Main
-            if [[ ${CLEAN_CACHE} == "true" ]]; then
+            if [[ "${CLEAN_CACHE}" == "true" ]]; then
                 CleanCache
             elif [[ -z "${CLEAN_CACHE}" ]]; then
                 CleanCacheInteraction
@@ -931,9 +989,9 @@ function UpdateSoftware() {
     case "${SYSTEM_FACTIONS}" in
     "${SYSTEM_DEBIAN}" | "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENSUSE}")
         if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_RHEL}" ]]; then
-            if [[ ${UPDATA_SOFTWARE} == "true" ]]; then
+            if [[ "${UPDATA_SOFTWARE}" == "true" ]]; then
                 Main
-                if [[ ${CLEAN_CACHE} == "true" ]]; then
+                if [[ "${CLEAN_CACHE}" == "true" ]]; then
                     CleanCache
                 elif [[ -z "${CLEAN_CACHE}" ]]; then
                     CleanCacheInteraction
@@ -948,8 +1006,7 @@ function UpdateSoftware() {
 
 ## 运行结束
 function RunEnd() {
-    echo -e "\n$COMPLETE 脚本执行结束\n"
-    AuthorSignature
+    echo -e "\n$COMPLETE 脚本执行结束 [\033[1;34m官网\033[0m] ${WEBSITE}\n"
 }
 
 ##############################################################################
@@ -976,19 +1033,19 @@ deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-updates ${source_suffix}
 # deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-updates ${source_suffix}
 deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-backports ${source_suffix}
 # deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-backports ${source_suffix}" >>$File_DebianSourceList
-        if [[ ${USE_ABROAD_SOURCE} == "true" ]]; then
-            echo "# deb ${basic_url}-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-# # deb-src ${basic_url}-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-
-deb https://security.debian.org/debian-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-# deb-src https://security.debian.org/debian-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}" >>$File_DebianSourceList
+        ## 处理 debian-security 仓库
+        local security_url="${SOURCE_SECURITY:-"${SOURCE}"}"
+        if [[ -z "${SOURCE_SECURITY}" ]]; then
+            if [[ "${USE_ABROAD_SOURCE}" == "true" ]]; then
+                local security_url="https://security.debian.org/${SOURCE_BRANCH_SECURITY:-"${SOURCE_BRANCH}-security"}"
+            else
+                local security_url="${WEB_PROTOCOL}://${SOURCE}/${SOURCE_BRANCH_SECURITY:-"${SOURCE_BRANCH}-security"}"
+            fi
         else
-            echo "deb ${basic_url}-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-# deb-src ${basic_url}-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-
-# deb https://security.debian.org/debian-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-# # deb-src https://security.debian.org/debian-security ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}" >>$File_DebianSourceList
+            local security_url="${WEB_PROTOCOL}://${SOURCE_SECURITY}/${SOURCE_BRANCH_SECURITY:-"${SOURCE_BRANCH}-security"}"
         fi
+        echo "deb ${security_url} ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
+# deb-src ${security_url} ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}" >>$File_DebianSourceList
         ;;
     "${SYSTEM_UBUNTU}")
         source_suffix="main restricted universe multiverse"
@@ -1002,9 +1059,6 @@ deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-backports ${source_suffix}
 deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
 # deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
 
-# deb http://security.ubuntu.com/ubuntu ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-# # deb-src http://security.ubuntu.com/ubuntu ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}
-
 ## 预发布软件源(不建议启用)
 # deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-proposed ${source_suffix}
 # deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-proposed ${source_suffix}" >>$File_DebianSourceList
@@ -1033,8 +1087,6 @@ function RedHatMirrors() {
         ## 生成 repo 源文件
         GenRepoFiles_EPEL
 
-        sed -i 's|^metalink=|#metalink=|g' $Dir_RedHatRepos/epel*
-
         # 更换 WEB 协议(HTTP/HTTPS)
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         9 | 8)
@@ -1045,6 +1097,7 @@ function RedHatMirrors() {
             ;;
         esac
         # 修改源
+        sed -i 's|^metalink=|#metalink=|g' $Dir_RedHatRepos/epel*
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         9)
             sed -i "s|download.example/pub|${SOURCE}|g" $Dir_RedHatRepos/epel*
@@ -1054,7 +1107,11 @@ function RedHatMirrors() {
             ;;
         esac
     }
-
+    ## 仅 EPEL 模式
+    if [[ "${ONLY_EPEL}" == "true" ]]; then
+        EPELMirrors
+        return
+    fi
     ## 生成基于 RedHat 发行版和及其衍生发行版的官方 repo 源文件
     case "${SYSTEM_JUDGMENT}" in
     "${SYSTEM_RHEL}")
@@ -1090,77 +1147,55 @@ function RedHatMirrors() {
     "${SYSTEM_RHEL}")
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         9)
-            sed -i 's|^mirrorlist=|#mirrorlist=|g' \
-                rocky.repo \
-                rocky-addons.repo \
-                rocky-devel.repo \
-                rocky-extras.repo
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
-                rocky.repo \
-                rocky-addons.repo \
-                rocky-devel.repo \
-                rocky-extras.repo
-            ## 禁用签名
-            sed -i "s|^gpgcheck=1|gpgcheck=0|g" \
-                rocky.repo \
-                rocky-addons.repo \
-                rocky-devel.repo \
-                rocky-extras.repo
-            sed -i "s|^gpgkey=|#gpgkey=|g" \
-                rocky.repo \
-                rocky-addons.repo \
-                rocky-devel.repo \
-                rocky-extras.repo
             # wget "${WEB_PROTOCOL}://${SOURCE}/${SOURCE_BRANCH}/RPM-GPG-KEY-rockyofficial" -P /etc/pki/rpm-gpg
             # wget "${WEB_PROTOCOL}://${SOURCE}/${SOURCE_BRANCH}/RPM-GPG-KEY-Rocky-9" -P /etc/pki/rpm-gpg
-
-            # 更换软件源
-            sed -i "s|dl.rockylinux.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" \
+            sed -e "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|^mirrorlist=|#mirrorlist=|g" \
+                -e "s|^gpgcheck=1|gpgcheck=0|g" \
+                -e "s|^gpgkey=|#gpgkey=|g" \
+                -e "s|dl.rockylinux.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" \
+                -i \
                 rocky.repo \
                 rocky-addons.repo \
                 rocky-devel.repo \
                 rocky-extras.repo
             ;;
         *)
+            sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" CentOS-*
             sed -i 's|^mirrorlist=|#mirrorlist=|g' CentOS-*
-
-            # Red Hat Enterprise Linux 修改版本号
             case ${SYSTEM_VERSION_NUMBER:0:1} in
             8)
-                ## CentOS 8 操作系统版本结束了生命周期(EOL),Linux 社区已不再维护该操作系统版本,最终版本为 8.5.2011
-                # 原 centos 镜像中的 CentOS 8 相关内容已被官方移动,从 2022-02 开始切换至 centos-vault 源
                 sed -i 's|mirror.centos.org/$contentdir|mirror.centos.org/centos-vault|g' CentOS-*
-                sed -i 's|vault.centos.org/$contentdir|mirror.centos.org/centos-vault|g' CentOS-Sources.repo # 单独处理 CentOS-Sources.repo
                 sed -i "s/\$releasever/8.5.2111/g" CentOS-*
+                # 单独处理 CentOS-Linux-Sources.repo
+                sed -i "s|vault.centos.org/\$contentdir|${SOURCE_VAULT:-"mirror.centos.org"}/${SOURCE_BRANCH_VAULT:-"centos-vault"}|g" CentOS-Linux-Sources.repo
                 ;;
             7)
+                sed -i "s|mirror.centos.org/\$contentdir|mirror.centos.org/${SOURCE_BRANCH}|g" CentOS-*
                 sed -i "s/\$releasever/7/g" CentOS-*
+                # 单独处理 CentOS-Sources.repo
+                sed -i "s|vault.centos.org/centos|${SOURCE_VAULT:-"mirror.centos.org"}/${SOURCE_BRANCH_VAULT:-"centos"}|g" CentOS-Sources.repo
                 ;;
             esac
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" CentOS-*
-            # 更换软件源
             sed -i "s|mirror.centos.org|${SOURCE}|g" CentOS-*
             ;;
         esac
         ;;
     "${SYSTEM_CENTOS}")
-        sed -i 's|^mirrorlist=|#mirrorlist=|g' CentOS-*
-
-        # 更换 WEB 协议(HTTP/HTTPS)
         sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" CentOS-*
-        # 更换软件源
+        sed -i 's|^mirrorlist=|#mirrorlist=|g' CentOS-*
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         8)
+            ## CentOS 8 操作系统版本结束了生命周期(EOL),Linux 社区已不再维护该操作系统版本,最终版本为 8.5.2011
+            # 原 centos 镜像中的 CentOS 8 相关内容已被官方移动,从 2022-02 开始切换至 centos-vault 源
             sed -i 's|mirror.centos.org/$contentdir|mirror.centos.org/centos-vault|g' CentOS-*
-            sed -i 's|vault.centos.org/$contentdir|mirror.centos.org/centos-vault|g' CentOS-Sources.repo # 单独处理 CentOS-Sources.repo
             sed -i "s/\$releasever/8.5.2111/g" CentOS-*
+            # 单独处理 CentOS-Linux-Sources.repo
+            sed -i "s|vault.centos.org/\$contentdir|${SOURCE_VAULT:-"mirror.centos.org"}/${SOURCE_BRANCH_VAULT:-"centos-vault"}|g" CentOS-Linux-Sources.repo
             ;;
         7)
             sed -i "s|mirror.centos.org/\$contentdir|mirror.centos.org/${SOURCE_BRANCH}|g" CentOS-*
+            sed -i "s|vault.centos.org/centos|${SOURCE_VAULT:-"mirror.centos.org"}/${SOURCE_BRANCH_VAULT:-"centos"}|g" CentOS-Sources.repo # 单独处理 CentOS-Sources.repo
             ;;
         esac
         sed -i "s|mirror.centos.org|${SOURCE}|g" CentOS-*
@@ -1169,99 +1204,58 @@ function RedHatMirrors() {
         # CentOS Stream 9 使用的是 centos-stream 镜像,而 CentOS Stream 8 使用的是 centos 镜像
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         9)
-            sed -i 's|^metalink=|#metalink=|g' \
-                centos.repo \
-                centos-addons.repo
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^#baseurl=https|baseurl=${WEB_PROTOCOL}|g" \
-                centos.repo \
-                centos-addons.repo
-            # 更换软件源
-            sed -i "s|mirror.stream.centos.org|${SOURCE}/${SOURCE_BRANCH}|g" \
+            sed -e "s|^#baseurl=https|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|^metalink=|#metalink=|g" \
+                -e "s|mirror.stream.centos.org|${SOURCE}/${SOURCE_BRANCH}|g" \
+                -i \
                 centos.repo \
                 centos-addons.repo
             ;;
         8)
-            sed -i 's|^mirrorlist=|#mirrorlist=|g' CentOS-Stream-*
-            sed -i 's|vault.centos.org/$contentdir|mirror.centos.org/centos-vault|g' CentOS-Stream-Sources.repo # 单独处理 CentOS-Stream-Sources.repo
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" CentOS-Stream-*
-            # 更换软件源
-            sed -i "s|mirror.centos.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" CentOS-Stream-*
+            sed -i "s|vault.centos.org/\$contentdir|${SOURCE_VAULT:-"mirror.centos.org"}/${SOURCE_BRANCH_VAULT:-"centos"}|g" CentOS-Stream-Sources.repo # 单独处理 CentOS-Stream-Sources.repo
+            sed -e "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|^mirrorlist=|#mirrorlist=|g" \
+                -e "s|mirror.centos.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" \
+                -i \
+                CentOS-Stream-*
             ;;
         esac
         ;;
     "${SYSTEM_ROCKY}")
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         9)
-            sed -i 's|^mirrorlist=|#mirrorlist=|g' \
-                rocky.repo \
-                rocky-addons.repo \
-                rocky-devel.repo \
-                rocky-extras.repo
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
-                rocky.repo \
-                rocky-addons.repo \
-                rocky-devel.repo \
-                rocky-extras.repo
-            # 更换软件源
-            sed -i "s|dl.rockylinux.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" \
+            sed -e "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|^mirrorlist=|#mirrorlist=|g" \
+                -e "s|dl.rockylinux.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" \
+                -i \
                 rocky.repo \
                 rocky-addons.repo \
                 rocky-devel.repo \
                 rocky-extras.repo
             ;;
         8)
-            sed -i 's|^mirrorlist=|#mirrorlist=|g' Rocky-*
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" Rocky-*
-            # 更换软件源
-            sed -i "s|dl.rockylinux.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" Rocky-*
+            sed -e "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|^mirrorlist=|#mirrorlist=|g" \
+                -e "s|dl.rockylinux.org/\$contentdir|${SOURCE}/${SOURCE_BRANCH}|g" \
+                -i \
+                Rocky-*
             ;;
         esac
         ;;
     "${SYSTEM_ALMA}")
         case ${SYSTEM_VERSION_NUMBER:0:1} in
         9)
-            sed -i 's|^mirrorlist=|#mirrorlist=|g' almalinux-*
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^# baseurl=http|baseurl=${WEB_PROTOCOL}|g" almalinux-*
-            # 更换软件源
-            sed -e "s|repo.almalinux.org/almalinux|${SOURCE}/${SOURCE_BRANCH}|g" \
+            sed -e "s|^# baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|^mirrorlist=|#mirrorlist=|g" \
+                -e "s|repo.almalinux.org/almalinux|${SOURCE}/${SOURCE_BRANCH}|g" \
                 -e "s|repo.almalinux.org/vault|${SOURCE}/${SOURCE_BRANCH}-vault|g" \
-                -i almalinux-*
+                -i \
+                almalinux-*
             ;;
         8)
-            sed -i 's|^mirrorlist=|#mirrorlist=|g' \
-                almalinux-ha.repo \
-                almalinux-nfv.repo \
-                almalinux-plus.repo \
-                almalinux-powertools.repo \
-                almalinux-resilientstorage.repo \
-                almalinux-rt.repo \
-                almalinux-sap.repo \
-                almalinux-saphana.repo \
-                almalinux.repo
-
-            # 更换 WEB 协议(HTTP/HTTPS)
-            sed -i "s|^# baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
-                almalinux-ha.repo \
-                almalinux-nfv.repo \
-                almalinux-plus.repo \
-                almalinux-powertools.repo \
-                almalinux-resilientstorage.repo \
-                almalinux-rt.repo \
-                almalinux-sap.repo \
-                almalinux-saphana.repo \
-                almalinux.repo
-            # 更换软件源
-            sed -e "s|repo.almalinux.org/almalinux|${SOURCE}/${SOURCE_BRANCH}|g" \
+            sed -e "s|^mirrorlist=|#mirrorlist=|g" \
+                -e "s|^# baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+                -e "s|repo.almalinux.org/almalinux|${SOURCE}/${SOURCE_BRANCH}|g" \
                 -e "s|repo.almalinux.org/vault|${SOURCE}/${SOURCE_BRANCH}-vault|g" \
                 -i \
                 almalinux-ha.repo \
@@ -1277,24 +1271,10 @@ function RedHatMirrors() {
         esac
         ;;
     "${SYSTEM_FEDORA}")
-        sed -i 's|^metalink=|#metalink=|g' \
-            fedora.repo \
-            fedora-updates.repo \
-            fedora-modular.repo \
-            fedora-updates-modular.repo \
-            fedora-updates-testing.repo \
-            fedora-updates-testing-modular.repo
-
-        # 更换 WEB 协议(HTTP/HTTPS)
-        sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
-            fedora.repo \
-            fedora-updates.repo \
-            fedora-modular.repo \
-            fedora-updates-modular.repo \
-            fedora-updates-testing.repo \
-            fedora-updates-testing-modular.repo
-        # 更换软件源
-        sed -i "s|download.example/pub/fedora/linux|${SOURCE}/${SOURCE_BRANCH}|g" \
+        sed -e "s|^metalink=|#metalink=|g" \
+            -e "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+            -e "s|download.example/pub/fedora/linux|${SOURCE}/${SOURCE_BRANCH}|g" \
+            -i \
             fedora.repo \
             fedora-updates.repo \
             fedora-modular.repo \
@@ -1307,7 +1287,7 @@ function RedHatMirrors() {
     ## EPEL 附加软件包(安装/换源)
     case "${SYSTEM_JUDGMENT}" in
     "${SYSTEM_RHEL}" | "${SYSTEM_CENTOS}" | "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMA}")
-        [[ ${INSTALL_EPEL} == "True" ]] && EPELMirrors
+        [[ "${INSTALL_EPEL}" == "True" ]] && EPELMirrors
         ;;
     esac
 }
@@ -1317,10 +1297,10 @@ function openEulerMirrors() {
     GenRepoFiles_openEuler
     cd $Dir_openEulerRepos
 
-    # 更换 WEB 协议(HTTP/HTTPS)
-    sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" openEuler.repo
-    # 更换软件源
-    sed -i "s|repo.openeuler.org|${SOURCE}/${SOURCE_BRANCH}|g" openEuler.repo
+    sed -e "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \
+        -e "s|repo.openeuler.org|${SOURCE}/${SOURCE_BRANCH}|g" \
+        -i \
+        openEuler.repo
 }
 
 ## 更换基于 openSUSE 发行版的软件源
@@ -3955,7 +3935,7 @@ EOF
 ## 生成 openSUSE 官方 repo 源文件
 function GenRepoFiles_openSUSE() {
     case $1 in
-    leap)
+    "leap")
         case $2 in
         15.[0-2])
             cat >$Dir_openSUSERepos/repo-debug-non-oss.repo <<\EOF
@@ -4168,7 +4148,7 @@ EOF
             ;;
         esac
         ;;
-    tumbleweed)
+    "tumbleweed")
         cat >$Dir_openSUSERepos/repo-debug.repo <<\EOF
 [repo-debug]
 name=openSUSE-Tumbleweed-Debug
@@ -4495,26 +4475,26 @@ function CommandOptions() {
         echo -e "
 选项命令(参数名/含义/参数值):
 
-  --source                 指定软件源地址           地址
-  --branch                 指定软件源分支           分支名
-  --abroad                 使用海外软件源           无
-  --web-protocol           指定 WEB 协议            http 或 https
-  --intranet               使用内网地址             true 或 false
-  --install-epel           安装 EPEL 附加软件包     true 或 false
-  --close-firewall         关闭防火墙               true 或 false
-  --backup                 备份原有软件源           true 或 false
-  --ignore-backup-tips     忽略覆盖备份提示         无
-  --updata-software        更新软件包               true 或 false
-  --clean-cache            清理下载缓存             true 或 false
-  
+  --source                 指定软件源地址                          地址
+  --source-security        指定 debian-security 软件源地址         地址
+  --source-vault           指定 centos-vault 软件源地址            地址
+  --branch                 指定软件源分支(路径)                    分支名
+  --branch-security        指定 debian-security 软件源分支(路径)   分支名
+  --branch-vault           指定 centos-vault 软件源分支(路径)      分支名
+  --abroad                 使用海外软件源                          无
+  --web-protocol           指定 WEB 协议                           http 或 https
+  --intranet               优先使用内网地址                        true 或 false
+  --install-epel           安装 EPEL 附加软件包                    true 或 false
+  --only-epel              仅更换 EPEL 软件源模式                  无
+  --close-firewall         关闭防火墙                              true 或 false
+  --backup                 备份原有软件源                          true 或 false
+  --ignore-backup-tips     忽略覆盖备份提示                        无
+  --updata-software        更新软件包                              true 或 false
+  --clean-cache            清理下载缓存                            true 或 false
+
 问题报告 https://github.com/SuperManito/LinuxMirrors/issues
   "
     }
-    ## 报错退出
-    function Output_Command_Error() {
-        echo -e "\n$ERROR $1\n"
-        exit 1
-    }
 
     ## 判断参数
     while [ $# -gt 0 ]; do
@@ -4528,13 +4508,39 @@ function CommandOptions() {
             if [ $2 ]; then
                 echo "$2" | grep -Eq "\-|\(|\)|\[|\]|\{|\}"
                 if [ $? -eq 0 ]; then
-                    Output_Command_Error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!"
+                    Output_Error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!"
                 else
                     SOURCE="$2"
                     shift
                 fi
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
+            fi
+            ;;
+        --source-security)
+            if [ $2 ]; then
+                echo "$2" | grep -Eq "\-|\(|\)|\[|\]|\{|\}"
+                if [ $? -eq 0 ]; then
+                    Output_Error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!"
+                else
+                    SOURCE_SECURITY="$2"
+                    shift
+                fi
+            else
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
+            fi
+            ;;
+        --source-vault)
+            if [ $2 ]; then
+                echo "$2" | grep -Eq "\-|\(|\)|\[|\]|\{|\}"
+                if [ $? -eq 0 ]; then
+                    Output_Error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!"
+                else
+                    SOURCE_VAULT="$2"
+                    shift
+                fi
+            else
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
             fi
             ;;
         ## 指定软件源分支
@@ -4543,7 +4549,23 @@ function CommandOptions() {
                 SOURCE_BRANCH="$2"
                 shift
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
+            fi
+            ;;
+        --branch-security)
+            if [ $2 ]; then
+                SOURCE_BRANCH_SECURITY="$2"
+                shift
+            else
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
+            fi
+            ;;
+        --branch-vault)
+            if [ $2 ]; then
+                SOURCE_BRANCH_VAULT="$2"
+                shift
+            else
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!"
             fi
             ;;
         ## 优先使用内网地址
@@ -4555,11 +4577,11 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
             fi
             ;;
         ## WEB 协议(HTTP/HTTPS)
@@ -4571,11 +4593,11 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 http 或 https 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 http 或 https 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 WEB 协议(HTTP/HTTPS)!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 WEB 协议(HTTP/HTTPS)!"
             fi
             ;;
         ## 安装 EPEL 附加软件包
@@ -4587,13 +4609,17 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
             fi
             ;;
+        --only-epel)
+            ONLY_EPEL="true"
+            INSTALL_EPEL="true"
+            ;;
         ## 关闭防火墙
         --close-firewall)
             if [ $2 ]; then
@@ -4603,11 +4629,11 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
             fi
             ;;
         ## 备份原有软件源
@@ -4619,11 +4645,11 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
             fi
             ;;
         ## 忽略覆盖备份提示
@@ -4639,11 +4665,11 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
             fi
             ;;
         ## 清理下载缓存
@@ -4655,11 +4681,11 @@ function CommandOptions() {
                     shift
                     ;;
                 *)
-                    Output_Command_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
+                    Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!"
                     ;;
                 esac
             else
-                Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
+                Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!"
             fi
             ;;
         --help)
@@ -4667,11 +4693,15 @@ function CommandOptions() {
             exit
             ;;
         *)
-            Output_Command_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请确认后重新输入!"
+            Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请确认后重新输入!"
             ;;
         esac
         shift
     done
+    ## 赋予部分命令参数默认值
+    ONLY_EPEL="${ONLY_EPEL:-"false"}"
+    BACKUP="${BACKUP:-"true"}"
+    IGNORE_BACKUP_TIPS="${IGNORE_BACKUP_TIPS:-"false"}"
 }
 
 ## 组合函数
diff --git a/docs/use/command-options.md b/docs/use/command-options.md
index b761fe7..4f70922 100644
--- a/docs/use/command-options.md
+++ b/docs/use/command-options.md
@@ -1,11 +1,16 @@
 | 名称 | 含义 | 选项值 |
 | :-: | :-: | :-: |
 | `--source` | 指定软件源地址 | 地址 |
-| `--branch` | 指定软件源分支 | 分支名 |
+| `--source-security` | 指定 debian-security 软件源地址 | 地址 |
+| `--source-vault` | 指定 centos-vault 软件源地址 | 地址 |
+| `--branch` | 指定软件源分支(路径) | 分支名 |
+| `--branch-security` | 指定 debian-security 软件源分支(路径) | 分支名 |
+| `--branch-vault` | 指定 centos-vault 软件源分支(路径) | 分支名 |
 | `--abroad` | 使用海外软件源 | 无 |
 | `--web-protocol` | 指定 WEB 协议 | `http` 或 `https` |
-| `--intranet` | 使用内网地址 | `true` 或 `false` |
+| `--intranet` | 优先使用内网地址 | `true` 或 `false` |
 | `--install-epel` | 安装 EPEL 附加软件包 | `true` 或 `false` |
+| `--only-epel` | 仅更换 EPEL 软件源模式 | 无 |
 | `--close-firewall` | 关闭防火墙 | `true` 或 `false` |
 | `--backup` | 备份原有软件源 | `true` 或 `false` |
 | `--ignore-backup-tips` | 忽略覆盖备份提示 | 无 |
@@ -20,7 +25,8 @@
 若不想通过交互选择默认提供的软件源,你可以使用该命令选项指定软件源地址
 
 ``` { .bash .no-copy }
-bash ChangeMirrors.sh --source mirrors.ustc.edu.cn
+bash <(curl -sSL https://linuxmirrors.cn/main.sh) \
+    --source mirror.example.com
 ```
 
 ### 指定软件源分支
@@ -48,7 +54,7 @@ bash ChangeMirrors.sh --source mirrors.ustc.edu.cn
 
 
       CentOS | 
-    centos/centos-stream/centos-altarch | 
+    centos/centos-stream/centos-altarch/centos-vault | 
 
 
       Rocky Linux | 
@@ -86,6 +92,24 @@ bash <(curl -sSL https://linuxmirrors.cn/main.sh) \
 
 阿里云镜像站的 Rocky Linux 镜像分支名称为 [`rockylinux`](https://mirrors.aliyun.com/rockylinux),不符合默认规则,但是可以通过命令选项绕过脚本默认规则来实现
 
+### 单独更换 EPEL 源
+
+有些时候你会发现想使用的镜像站没有 epel 镜像仓库,那么你可以在第一次运行脚本时不安装或不更换 epel 源,然后再单独执行下面的命令
+
+``` bash
+bash <(curl -sSL https://linuxmirrors.cn/main.sh) --only-epel
+```
+
+### 自定义 Debian Security 源
+
+如果你想提高服务器的安全性请尽可能使用官方源,因为镜像同步存在延迟
+
+``` bash title="官方源"
+bash <(curl -sSL https://linuxmirrors.cn/main.sh) \
+  --source-security security.debian.org \
+  --branch-security debian-security
+```
+
 ## 无人值守
 
 不通过交互完成换源操作,需要使用大量命令选项来实现,建议熟悉后再使用