Merge pull request #1114 from sofia-riese/patch-4

refactor(set_adv_config): replace recursion with while loop
This commit is contained in:
juewuy
2026-01-15 17:04:09 +08:00
committed by GitHub

View File

@@ -281,125 +281,165 @@ set_redir_mod() {
done done
} }
set_adv_config() { #端口设置 inputport() {
. "$CFG_PATH" >/dev/null read -p "请输入端口号(1-65535) > " portx
[ -z "$secret" ] && secret=未设置 . "$CRASHDIR"/menus/check_port.sh # 加载测试函数
[ -z "$table" ] && table=100 if check_port "$portx"; then
[ -z "$authentication" ] && auth=未设置 || auth=****** setconfig "$xport" "$portx"
inputport() { echo -e "\033[32m设置成功\033[0m"
read -p "请输入端口号(1-65535) > " portx return 0
. "$CRASHDIR"/menus/check_port.sh #加载测试函数 else
if check_port "$portx"; then echo -e "\033[31m设置失败\033[0m"
setconfig "$xport" "$portx" sleep 1
echo -e "\033[32m设置成功\033[0m" return 1
set_adv_config fi
else }
sleep 1
fi # 端口设置
} set_adv_config() {
echo "-----------------------------------------------" while true; do
echo -e " 1 修改Http/Sock5端口 \033[36m$mix_port\033[0m" . "$CFG_PATH" >/dev/null
echo -e " 2 设置Http/Sock5密码 \033[36m$auth\033[0m" [ -z "$secret" ] && secret=未设置
echo -e " 3 修改Redir/Tproxy端口\033[36m$redir_port,$((redir_port + 1))\033[0m" [ -z "$table" ] && table=100
echo -e " 4 修改DNS监听端口 \033[36m$dns_port\033[0m" [ -z "$authentication" ] && auth=未设置 || auth=******
echo -e " 5 修改面板访问端口: \033[36m$db_port\033[0m"
echo -e " 6 设置面板访问密码: \033[36m$secret\033[0m"
echo -e " 8 自定义本机host地址 \033[36m$host\033[0m"
echo -e " 9 自定义路由表: \033[36m$table,$((table + 1))\033[0m"
echo -e " 0 返回上级菜单"
read -p "请输入对应数字 > " num
case "$num" in
0) ;;
1)
xport=mix_port
inputport
;;
2)
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "格式必须是\033[32m 用户名:密码 \033[0m的形式注意用小写冒号分隔" echo -e " 1 修改Http/Sock5端口 \033[36m$mix_port\033[0m"
echo -e "请尽量不要使用特殊符号!避免产生未知错误!" echo -e " 2 设置Http/Sock5密码 \033[36m$auth\033[0m"
echo "输入 0 删除密码" echo -e " 3 修改Redir/Tproxy端口\033[36m$redir_port,$((redir_port + 1))\033[0m"
echo "-----------------------------------------------" echo -e " 4 修改DNS监听端口 \033[36m$dns_port\033[0m"
read -p "请输入Http/Sock5用户名及密码 > " input echo -e " 5 修改面板访问端口: \033[36m$db_port\033[0m"
if [ "$input" = "0" ]; then echo -e " 6 设置面板访问密码: \033[36m$secret\033[0m"
authentication="" echo -e " 8 自定义本机host地址 \033[36m$host\033[0m"
setconfig authentication echo -e " 9 自定义路由表: \033[36m$table,$((table + 1))\033[0m"
echo 密码已移除! echo -e " 0 返回上级菜单"
else read -p "请输入对应数字 > " num
if [ "$local_proxy" = "ON" -a "$local_type" = "环境变量" ]; then case "$num" in
echo "-----------------------------------------------" "" | 0)
echo -e "\033[33m请先禁用本机劫持功能或使用增强模式\033[0m" break
sleep 1 ;;
1)
xport=mix_port
inputport
ret=$?
if [ "$ret" -eq 1 ]; then
break
else else
authentication=$(echo $input | grep :) continue
if [ -n "$authentication" ]; then fi
setconfig authentication "'$authentication'" ;;
echo -e "\033[32m设置成功\033[0m" 2)
echo "-----------------------------------------------"
echo -e "格式必须是\033[32m 用户名:密码 \033[0m的形式注意用小写冒号分隔"
echo -e "请尽量不要使用特殊符号!避免产生未知错误!"
echo "输入 0 删除密码"
echo "-----------------------------------------------"
read -p "请输入Http/Sock5用户名及密码 > " input
if [ "$input" = "0" ]; then
authentication=""
setconfig authentication
echo "密码已移除!"
else
if [ "$local_proxy" = "ON" ] && [ "$local_type" = "环境变量" ]; then
echo "-----------------------------------------------"
echo -e "\033[33m请先禁用本机劫持功能或使用增强模式\033[0m"
sleep 1
else else
echo -e "\033[31m输入有误请重新输入\033[0m" authentication=$(echo "$input" | grep :)
if [ -n "$authentication" ]; then
setconfig authentication "'$authentication'"
echo -e "\033[32m设置成功\033[0m"
else
echo -e "\033[31m输入有误请重新输入\033[0m"
fi
fi fi
fi fi
fi
set_adv_config ret=$?
;; if [ "$ret" -eq 1 ]; then
3) break
xport=redir_port else
inputport continue
;; fi
4) ;;
xport=dns_port 3)
inputport xport=redir_port
;; inputport
5)
xport=db_port ret=$?
inputport if [ "$ret" -eq 1 ]; then
;; break
6) else
read -p "请输入面板访问密码(输入0删除密码) > " secret continue
if [ -n "$secret" ]; then fi
[ "$secret" = "0" ] && secret="" ;;
setconfig secret $secret 4)
echo -e "\033[32m设置成功\033[0m" xport=dns_port
fi inputport
set_adv_config
;; ret=$?
8) if [ "$ret" -eq 1 ]; then
echo "-----------------------------------------------" break
echo -e "\033[33m如果你的局域网网段不是192.168.x或172.16.x或10.x开头请务必修改\033[0m" else
echo -e "\033[31m设置后如本机host地址有变动请务必重新修改\033[0m" continue
echo "-----------------------------------------------" fi
read -p "请输入自定义host地址(输入0移除自定义host) > " host ;;
if [ "$host" = "0" ]; then 5)
host="" xport=db_port
setconfig host "$host" inputport
echo -e "\033[32m已经移除自定义host地址请重新运行脚本以自动获取host\033[0m"
exit 0 ret=$?
elif [ -n "$(echo $host | grep -E -o '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>){2}\.\<([1-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>')" ]; then if [ "$ret" -eq 1 ]; then
setconfig host "$host" break
echo -e "\033[32m设置成功\033[0m" else
else continue
host="" fi
echo -e "\033[31m输入错误请仔细核对\033[0m" ;;
fi 6)
sleep 1 read -p "请输入面板访问密码(输入0删除密码) > " secret
set_adv_config if [ -n "$secret" ]; then
;; [ "$secret" = "0" ] && secret=""
9) setconfig secret "$secret"
echo "-----------------------------------------------" echo -e "\033[32m设置成功\033[0m"
echo -e "\033[33m仅限Tproxy、Tun或混合模式路由表出现冲突时才需要设置\033[0m" fi
read -p "请输入路由表地址(不明勿动建议102-125之间) > " table ;;
if [ -n "$table" ]; then 8)
[ "$table" = "0" ] && table="100" echo "-----------------------------------------------"
setconfig table "$table" echo -e "\033[33m如果你的局域网网段不是192.168.x或172.16.x或10.x开头请务必修改\033[0m"
echo -e "\033[32m设置成功!!\033[0m" echo -e "\033[31m设置后如本机host地址有变动请务必重新修改\033[0m"
fi echo "-----------------------------------------------"
set_adv_config read -p "请输入自定义host地址(输入0移除自定义host) > " host
;; if [ "$host" = "0" ]; then
*) host=""
errornum setconfig host "$host"
;; echo -e "\033[32m已经移除自定义host地址请重新运行脚本以自动获取host\033[0m"
esac exit 0
elif [ -n "$(echo "$host" | grep -E -o '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>){2}\.\<([1-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>')" ]; then
setconfig host "$host"
echo -e "\033[32m设置成功\033[0m"
else
host=""
echo -e "\033[31m输入错误请仔细核对\033[0m"
fi
sleep 1
;;
9)
echo "-----------------------------------------------"
echo -e "\033[33m仅限Tproxy、Tun或混合模式路由表出现冲突时才需要设置\033[0m"
read -p "请输入路由表地址(不明勿动建议102-125之间) > " table
if [ -n "$table" ]; then
[ "$table" = "0" ] && table="100"
setconfig table "$table"
echo -e "\033[32m设置成功\033[0m"
fi
;;
*)
errornum
sleep 1
;;
esac
done
} }
set_firewall_area() { #路由范围设置 set_firewall_area() { #路由范围设置
[ -z "$vm_redir" ] && vm_redir='OFF' [ -z "$vm_redir" ] && vm_redir='OFF'
echo "-----------------------------------------------" echo "-----------------------------------------------"