Merge pull request #1149 from sofia-riese/patch-1

refactor(dns.sh): replace recursion with while loop
This commit is contained in:
juewuy
2026-01-18 09:48:58 +08:00
committed by GitHub

View File

@@ -6,7 +6,9 @@ __IS_MODULE_DNS_LOADED=1
load_lang dns load_lang dns
set_dns_mod() { # DNS 模式设置 # DNS 模式设置
set_dns_mod() {
while true; do
[ -z "$hosts_opt" ] && hosts_opt=ON [ -z "$hosts_opt" ] && hosts_opt=ON
[ -z "$dns_protect" ] && dns_protect=ON [ -z "$dns_protect" ] && dns_protect=ON
[ -z "$ecs_subnet" ] && ecs_subnet=OFF [ -z "$ecs_subnet" ] && ecs_subnet=OFF
@@ -28,10 +30,12 @@ set_dns_mod() { # DNS 模式设置
echo -e " 9 \033[36m$DNS_ADV_MENU\033[0m" echo -e " 9 \033[36m$DNS_ADV_MENU\033[0m"
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo " 0 $COMMON_BACK" echo " 0 $COMMON_BACK"
read -p "$COMMON_INPUT > " num read -r -p "$COMMON_INPUT > " num
case "$num" in case "$num" in
0) ;; "" | 0)
1|2) break
;;
1 | 2)
if echo "$crashcore" | grep -q 'singbox' || [ "$crashcore" = meta ]; then if echo "$crashcore" | grep -q 'singbox' || [ "$crashcore" = meta ]; then
[ "$num" = 1 ] && dns_mod=mix || dns_mod=route [ "$num" = 1 ] && dns_mod=mix || dns_mod=route
setconfig dns_mod "$dns_mod" setconfig dns_mod "$dns_mod"
@@ -41,28 +45,23 @@ set_dns_mod() { # DNS 模式设置
echo -e "\033[31m$DNS_CORE_UNSUPPORTED\033[0m" echo -e "\033[31m$DNS_CORE_UNSUPPORTED\033[0m"
sleep 1 sleep 1
fi fi
set_dns_mod
;; ;;
3) 3)
dns_mod=redir_host dns_mod=redir_host
setconfig dns_mod "$dns_mod" setconfig dns_mod "$dns_mod"
echo -e "\033[36m$DNS_SET_OK: $dns_mod\033[0m" echo -e "\033[36m$DNS_SET_OK: $dns_mod\033[0m"
set_dns_mod
;; ;;
4) 4)
[ "$dns_protect" = ON ] && dns_protect=OFF || dns_protect=ON [ "$dns_protect" = ON ] && dns_protect=OFF || dns_protect=ON
setconfig dns_protect "$dns_protect" setconfig dns_protect "$dns_protect"
set_dns_mod
;; ;;
5) 5)
[ "$hosts_opt" = ON ] && hosts_opt=OFF || hosts_opt=ON [ "$hosts_opt" = ON ] && hosts_opt=OFF || hosts_opt=ON
setconfig hosts_opt "$hosts_opt" setconfig hosts_opt "$hosts_opt"
set_dns_mod
;; ;;
6) 6)
[ "$ecs_subnet" = ON ] && ecs_subnet=OFF || ecs_subnet=ON [ "$ecs_subnet" = ON ] && ecs_subnet=OFF || ecs_subnet=ON
setconfig ecs_subnet "$ecs_subnet" setconfig ecs_subnet "$ecs_subnet"
set_dns_mod
;; ;;
7) 7)
echo "-----------------------------------------------" echo "-----------------------------------------------"
@@ -70,7 +69,7 @@ set_dns_mod() { # DNS 模式设置
echo -e "\033[33m$DNS_REDIR_HINT 127.0.0.1:$dns_port\033[0m" echo -e "\033[33m$DNS_REDIR_HINT 127.0.0.1:$dns_port\033[0m"
echo "-----------------------------------------------" echo "-----------------------------------------------"
read -p "$DNS_REDIR_INPUT" num read -r -p "$DNS_REDIR_INPUT" num
if [ "$num" = 0 ]; then if [ "$num" = 0 ]; then
dns_redir_port="$dns_port" dns_redir_port="$dns_port"
@@ -86,23 +85,23 @@ set_dns_mod() { # DNS 模式设置
errornum errornum
fi fi
sleep 1 sleep 1
set_dns_mod
;; ;;
8) 8)
fake_ip_filter fake_ip_filter
set_dns_mod
;; ;;
9) 9)
set_dns_adv set_dns_adv
set_dns_mod
;; ;;
*) *)
errornum errornum
sleep 1
;; ;;
esac esac
done
} }
fake_ip_filter() { fake_ip_filter() {
while true; do
echo -e "\033[32m$DNS_FAKEIP_DESC\033[0m" echo -e "\033[32m$DNS_FAKEIP_DESC\033[0m"
echo -e "\033[31m$DNS_FAKEIP_TIP\033[0m" echo -e "\033[31m$DNS_FAKEIP_TIP\033[0m"
echo -e "\033[36m$DNS_FAKEIP_EXAMPLE\033[0m" echo -e "\033[36m$DNS_FAKEIP_EXAMPLE\033[0m"
@@ -114,25 +113,29 @@ fake_ip_filter() {
echo -e "\033[33m$DNS_FAKEIP_EMPTY\033[0m" echo -e "\033[33m$DNS_FAKEIP_EMPTY\033[0m"
fi fi
echo "-----------------------------------------------" echo "-----------------------------------------------"
read -p "$DNS_FAKEIP_EDIT > " input read -r -p "$DNS_FAKEIP_EDIT > " input
case "$input" in case "$input" in
0|'') ;; "" | 0)
break
;;
*) *)
if [ "$input" -ge 1 ] 2>/dev/null; then if [ "$input" -ge 1 ] 2>/dev/null; then
sed -i "${input}d" "$CRASHDIR/configs/fake_ip_filter" sed -i "${input}d" "$CRASHDIR/configs/fake_ip_filter"
echo -e "\033[32m$COMMON_REMOVE_OK\033[0m" echo -e "\033[32m$COMMON_REMOVE_OK\033[0m"
else else
echo -e "$COMMON_YOUR_INPUT \033[32m$input\033[0m" echo -e "$COMMON_YOUR_INPUT \033[32m$input\033[0m"
read -p "$COMMON_CONFIRM" res read -r -p "$COMMON_CONFIRM" res
[ "$res" = 1 ] && echo "$input" >>"$CRASHDIR/configs/fake_ip_filter" [ "$res" = 1 ] && echo "$input" >>"$CRASHDIR/configs/fake_ip_filter"
fi fi
sleep 1 sleep 1
fake_ip_filter
;; ;;
esac esac
done
} }
set_dns_adv() { # DNS详细设置 # DNS详细设置
set_dns_adv() {
while true; do
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "DIRECT-DNS \033[32m$dns_nameserver\033[0m" echo -e "DIRECT-DNS \033[32m$dns_nameserver\033[0m"
echo -e "PROXY-DNS \033[36m$dns_fallback\033[0m" echo -e "PROXY-DNS \033[36m$dns_fallback\033[0m"
@@ -151,28 +154,26 @@ set_dns_adv() { # DNS详细设置
echo -e " 0 $COMMON_BACK" echo -e " 0 $COMMON_BACK"
echo "-----------------------------------------------" echo "-----------------------------------------------"
read -p "$COMMON_INPUT > " num read -r -p "$COMMON_INPUT > " num
case "$num" in case "$num" in
0) ;; "" | 0)
break
;;
1) 1)
read -p "$DNS_INPUT_NEW" dns_nameserver read -r -p "$DNS_INPUT_NEW" dns_nameserver
dns_nameserver=$(echo "$dns_nameserver" | sed 's#|#,\ #g') dns_nameserver=$(echo "$dns_nameserver" | sed 's#|#,\ #g')
[ -n "$dns_nameserver" ] && setconfig dns_nameserver "'$dns_nameserver'" [ -n "$dns_nameserver" ] && setconfig dns_nameserver "'$dns_nameserver'"
echo -e "\033[32m$COMMON_SUCCESS\033[0m" echo -e "\033[32m$COMMON_SUCCESS\033[0m"
sleep 1
set_dns_adv
;; ;;
2) 2)
read -p "$DNS_INPUT_NEW" dns_fallback read -r -p "$DNS_INPUT_NEW" dns_fallback
dns_fallback=$(echo "$dns_fallback" | sed 's#|#,\ #g') dns_fallback=$(echo "$dns_fallback" | sed 's#|#,\ #g')
[ -n "$dns_fallback" ] && setconfig dns_fallback "'$dns_fallback'" [ -n "$dns_fallback" ] && setconfig dns_fallback "'$dns_fallback'"
echo -e "\033[32m$COMMON_SUCCESS\033[0m" echo -e "\033[32m$COMMON_SUCCESS\033[0m"
sleep 1
set_dns_adv
;; ;;
3) 3)
read -p "$DNS_INPUT_NEW" text read -r -p "$DNS_INPUT_NEW" text
if echo "$text" | grep -qE '://.*::'; then if echo "$text" | grep -qE '://.*::'; then
echo -e "\033[31m$DNS_IPV6_NOT_SUPPORT\033[0m" echo -e "\033[31m$DNS_IPV6_NOT_SUPPORT\033[0m"
else else
@@ -180,8 +181,6 @@ set_dns_adv() { # DNS详细设置
setconfig dns_resolver "'$dns_resolver'" setconfig dns_resolver "'$dns_resolver'"
echo -e "\033[32m$COMMON_SUCCESS\033[0m" echo -e "\033[32m$COMMON_SUCCESS\033[0m"
fi fi
sleep 1
set_dns_adv
;; ;;
4) 4)
if echo "$crashcore" | grep -qE 'meta|singbox'; then if echo "$crashcore" | grep -qE 'meta|singbox'; then
@@ -195,8 +194,6 @@ set_dns_adv() { # DNS详细设置
else else
echo -e "\033[31m$DNS_CORE_REQUIRE\033[0m" echo -e "\033[31m$DNS_CORE_REQUIRE\033[0m"
fi fi
sleep 1
set_dns_adv
;; ;;
9) 9)
setconfig dns_nameserver setconfig dns_nameserver
@@ -204,12 +201,11 @@ set_dns_adv() { # DNS详细设置
setconfig dns_resolver setconfig dns_resolver
. "$CRASHDIR/libs/get_config.sh" . "$CRASHDIR/libs/get_config.sh"
echo -e "\033[32m$COMMON_SUCCESS\033[0m" echo -e "\033[32m$COMMON_SUCCESS\033[0m"
sleep 1
set_dns_adv
;; ;;
*) *)
errornum errornum
sleep 1
;; ;;
esac esac
sleep 1
done
} }