mirror of
https://github.com/juewuy/ShellCrash.git
synced 2026-03-12 08:21:40 +00:00
refactor: replace recursion with while loop in settings
This commit is contained in:
@@ -4,139 +4,138 @@
|
|||||||
[ -n "$__IS_MODULE_2_SETTINGS_LOADED" ] && return
|
[ -n "$__IS_MODULE_2_SETTINGS_LOADED" ] && return
|
||||||
__IS_MODULE_2_SETTINGS_LOADED=1
|
__IS_MODULE_2_SETTINGS_LOADED=1
|
||||||
|
|
||||||
settings() { #功能设置
|
# 功能设置
|
||||||
#获取设置默认显示
|
settings() {
|
||||||
[ -z "$skip_cert" ] && skip_cert=ON
|
while true; do
|
||||||
[ -z "$sniffer" ] && sniffer=OFF
|
# 获取设置默认显示
|
||||||
[ -z "$dns_mod" ] && dns_mod='redir_host'
|
[ -z "$skip_cert" ] && skip_cert=ON
|
||||||
#
|
[ -z "$sniffer" ] && sniffer=OFF
|
||||||
echo "-----------------------------------------------"
|
[ -z "$dns_mod" ] && dns_mod='redir_host'
|
||||||
echo -e "\033[30;47m欢迎使用功能设置菜单:\033[0m"
|
|
||||||
echo "-----------------------------------------------"
|
|
||||||
echo -e " 1 路由模式设置: \033[36m$redir_mod\033[0m"
|
|
||||||
echo -e " 2 DNS设置: \033[36m$dns_mod\033[0m"
|
|
||||||
echo -e " 3 透明路由\033[32m流量过滤\033[0m"
|
|
||||||
[ "$disoverride" != "1" ] && {
|
|
||||||
echo -e " 4 跳过证书验证: \033[36m$skip_cert\033[0m"
|
|
||||||
echo -e " 5 启用域名嗅探: \033[36m$sniffer\033[0m"
|
|
||||||
echo -e " 6 自定义\033[32m端口及秘钥\033[0m"
|
|
||||||
}
|
|
||||||
echo -e " 8 ipv6设置: \033[36m$ipv6_redir\033[0m"
|
|
||||||
echo "-----------------------------------------------"
|
|
||||||
echo -e " 9 \033[31m重置/备份/还原\033[0m脚本设置"
|
|
||||||
echo -e " 0 返回上级菜单 \033[0m"
|
|
||||||
echo "-----------------------------------------------"
|
|
||||||
read -p "请输入对应数字 > " num
|
|
||||||
case "$num" in
|
|
||||||
0)
|
|
||||||
;;
|
|
||||||
1)
|
|
||||||
if [ "$USER" != "root" -a "$USER" != "admin" ]; then
|
|
||||||
echo "-----------------------------------------------"
|
|
||||||
read -p "非root用户可能无法正确配置其他模式!依然尝试吗?(1/0) > " res
|
|
||||||
[ "$res" = 1 ] && set_redir_mod
|
|
||||||
else
|
|
||||||
set_redir_mod
|
|
||||||
fi
|
|
||||||
sleep 1
|
|
||||||
settings
|
|
||||||
;;
|
|
||||||
2)
|
|
||||||
. "$CRASHDIR"/menus/dns.sh && set_dns_mod
|
|
||||||
sleep 1
|
|
||||||
settings
|
|
||||||
;;
|
|
||||||
3)
|
|
||||||
. "$CRASHDIR"/menus/fw_filter.sh && set_fw_filter
|
|
||||||
sleep 1
|
|
||||||
settings
|
|
||||||
;;
|
|
||||||
4)
|
|
||||||
echo "-----------------------------------------------"
|
echo "-----------------------------------------------"
|
||||||
if [ "$skip_cert" = "OFF" ] >/dev/null 2>&1; then
|
echo -e "\033[30;47m欢迎使用功能设置菜单:\033[0m"
|
||||||
echo -e "\033[33m已设为开启跳过本地证书验证!!\033[0m"
|
|
||||||
skip_cert=ON
|
|
||||||
else
|
|
||||||
echo -e "\033[33m已设为禁止跳过本地证书验证!!\033[0m"
|
|
||||||
skip_cert=OFF
|
|
||||||
fi
|
|
||||||
setconfig skip_cert $skip_cert
|
|
||||||
settings
|
|
||||||
;;
|
|
||||||
5)
|
|
||||||
echo "-----------------------------------------------"
|
echo "-----------------------------------------------"
|
||||||
if [ "$sniffer" = "OFF" ]; then
|
echo -e " 1 路由模式设置: \033[36m$redir_mod\033[0m"
|
||||||
if [ "$crashcore" = "clash" ]; then
|
echo -e " 2 DNS设置: \033[36m$dns_mod\033[0m"
|
||||||
rm -rf ${TMPDIR}/CrashCore
|
echo -e " 3 透明路由\033[32m流量过滤\033[0m"
|
||||||
rm -rf "$CRASHDIR"/CrashCore
|
[ "$disoverride" != "1" ] && {
|
||||||
rm -rf "$CRASHDIR"/CrashCore.tar.gz
|
echo -e " 4 跳过证书验证: \033[36m$skip_cert\033[0m"
|
||||||
crashcore=meta
|
echo -e " 5 启用域名嗅探: \033[36m$sniffer\033[0m"
|
||||||
setconfig crashcore $crashcore
|
echo -e " 6 自定义\033[32m端口及秘钥\033[0m"
|
||||||
echo "已将ShellCrash内核切换为Meta内核!域名嗅探依赖Meta或者高版本clashpre内核!"
|
}
|
||||||
fi
|
echo -e " 8 ipv6设置: \033[36m$ipv6_redir\033[0m"
|
||||||
sniffer=ON
|
echo "-----------------------------------------------"
|
||||||
elif [ "$crashcore" = "clashpre" -a "$dns_mod" = "redir_host" ]; then
|
echo -e " 9 \033[31m重置/备份/还原\033[0m脚本设置"
|
||||||
echo -e "\033[31m使用clashpre内核且开启redir-host模式时无法关闭!\033[0m"
|
echo -e " 0 返回上级菜单 \033[0m"
|
||||||
else
|
|
||||||
sniffer=OFF
|
|
||||||
fi
|
|
||||||
setconfig sniffer $sniffer
|
|
||||||
settings
|
|
||||||
;;
|
|
||||||
6)
|
|
||||||
if [ -n "$(pidof CrashCore)" ]; then
|
|
||||||
echo "-----------------------------------------------"
|
|
||||||
echo -e "\033[33m检测到服务正在运行,需要先停止服务!\033[0m"
|
|
||||||
read -p "是否停止服务?(1/0) > " res
|
|
||||||
if [ "$res" = "1" ]; then
|
|
||||||
"$CRASHDIR"/start.sh stop
|
|
||||||
set_adv_config
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
set_adv_config
|
|
||||||
fi
|
|
||||||
settings
|
|
||||||
;;
|
|
||||||
8)
|
|
||||||
set_ipv6
|
|
||||||
settings
|
|
||||||
;;
|
|
||||||
9)
|
|
||||||
echo "-----------------------------------------------"
|
|
||||||
echo -e " 1 备份脚本设置"
|
|
||||||
echo -e " 2 还原脚本设置"
|
|
||||||
echo -e " 3 重置脚本设置"
|
|
||||||
echo -e " 0 返回上级菜单"
|
|
||||||
echo "-----------------------------------------------"
|
echo "-----------------------------------------------"
|
||||||
read -p "请输入对应数字 > " num
|
read -p "请输入对应数字 > " num
|
||||||
if [ -z "$num" ]; then
|
case "$num" in
|
||||||
errornum
|
"" | 0)
|
||||||
elif [ "$num" = 0 ]; then
|
break
|
||||||
i=
|
;;
|
||||||
elif [ "$num" = 1 ]; then
|
1)
|
||||||
cp -f "$CFG_PATH" "$CFG_PATH".bak
|
if [ "$USER" != "root" -a "$USER" != "admin" ]; then
|
||||||
echo -e "\033[32m脚本设置已备份!\033[0m"
|
echo "-----------------------------------------------"
|
||||||
elif [ "$num" = 2 ]; then
|
read -p "非root用户可能无法正确配置其他模式!依然尝试吗?(1/0) > " res
|
||||||
if [ -f "$CFG_PATH.bak" ]; then
|
[ "$res" = 1 ] && set_redir_mod
|
||||||
mv -f "$CFG_PATH" "$CFG_PATH".bak2
|
|
||||||
mv -f "$CFG_PATH".bak "$CFG_PATH"
|
|
||||||
mv -f "$CFG_PATH".bak2 "$CFG_PATH".bak
|
|
||||||
echo -e "\033[32m脚本设置已还原!(被覆盖的配置已备份!)\033[0m"
|
|
||||||
else
|
else
|
||||||
echo -e "\033[31m找不到备份文件,请先备份脚本设置!\033[0m"
|
set_redir_mod
|
||||||
fi
|
fi
|
||||||
elif [ "$num" = 3 ]; then
|
sleep 1
|
||||||
mv -f "$CFG_PATH" "$CFG_PATH".bak
|
;;
|
||||||
. "$CRASHDIR"/init.sh >/dev/null
|
2)
|
||||||
echo -e "\033[32m脚本设置已重置!(旧文件已备份!)\033[0m"
|
. "$CRASHDIR"/menus/dns.sh && set_dns_mod
|
||||||
fi
|
sleep 1
|
||||||
echo -e "\033[33m请重新启动脚本!\033[0m"
|
;;
|
||||||
exit 0
|
3)
|
||||||
;;
|
. "$CRASHDIR"/menus/fw_filter.sh && set_fw_filter
|
||||||
*)
|
sleep 1
|
||||||
errornum
|
;;
|
||||||
;;
|
4)
|
||||||
esac
|
echo "-----------------------------------------------"
|
||||||
|
if [ "$skip_cert" = "OFF" ] >/dev/null 2>&1; then
|
||||||
|
echo -e "\033[33m已设为开启跳过本地证书验证!!\033[0m"
|
||||||
|
skip_cert=ON
|
||||||
|
else
|
||||||
|
echo -e "\033[33m已设为禁止跳过本地证书验证!!\033[0m"
|
||||||
|
skip_cert=OFF
|
||||||
|
fi
|
||||||
|
setconfig skip_cert $skip_cert
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
echo "-----------------------------------------------"
|
||||||
|
if [ "$sniffer" = "OFF" ]; then
|
||||||
|
if [ "$crashcore" = "clash" ]; then
|
||||||
|
rm -rf ${TMPDIR}/CrashCore
|
||||||
|
rm -rf "$CRASHDIR"/CrashCore
|
||||||
|
rm -rf "$CRASHDIR"/CrashCore.tar.gz
|
||||||
|
crashcore=meta
|
||||||
|
setconfig crashcore $crashcore
|
||||||
|
echo "已将ShellCrash内核切换为Meta内核!域名嗅探依赖Meta或者高版本clashpre内核!"
|
||||||
|
fi
|
||||||
|
sniffer=ON
|
||||||
|
elif [ "$crashcore" = "clashpre" -a "$dns_mod" = "redir_host" ]; then
|
||||||
|
echo -e "\033[31m使用clashpre内核且开启redir-host模式时无法关闭!\033[0m"
|
||||||
|
else
|
||||||
|
sniffer=OFF
|
||||||
|
fi
|
||||||
|
setconfig sniffer $sniffer
|
||||||
|
;;
|
||||||
|
6)
|
||||||
|
if [ -n "$(pidof CrashCore)" ]; then
|
||||||
|
echo "-----------------------------------------------"
|
||||||
|
echo -e "\033[33m检测到服务正在运行,需要先停止服务!\033[0m"
|
||||||
|
read -p "是否停止服务?(1/0) > " res
|
||||||
|
if [ "$res" = "1" ]; then
|
||||||
|
"$CRASHDIR"/start.sh stop
|
||||||
|
set_adv_config
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
set_adv_config
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
8)
|
||||||
|
set_ipv6
|
||||||
|
;;
|
||||||
|
9)
|
||||||
|
echo "-----------------------------------------------"
|
||||||
|
echo -e " 1 备份脚本设置"
|
||||||
|
echo -e " 2 还原脚本设置"
|
||||||
|
echo -e " 3 重置脚本设置"
|
||||||
|
echo -e " 0 返回上级菜单"
|
||||||
|
echo "-----------------------------------------------"
|
||||||
|
read -p "请输入对应数字 > " num
|
||||||
|
if [ -z "$num" ]; then
|
||||||
|
errornum
|
||||||
|
elif [ "$num" = 0 ]; then
|
||||||
|
i=
|
||||||
|
elif [ "$num" = 1 ]; then
|
||||||
|
cp -f "$CFG_PATH" "$CFG_PATH".bak
|
||||||
|
echo -e "\033[32m脚本设置已备份!\033[0m"
|
||||||
|
elif [ "$num" = 2 ]; then
|
||||||
|
if [ -f "$CFG_PATH.bak" ]; then
|
||||||
|
mv -f "$CFG_PATH" "$CFG_PATH".bak2
|
||||||
|
mv -f "$CFG_PATH".bak "$CFG_PATH"
|
||||||
|
mv -f "$CFG_PATH".bak2 "$CFG_PATH".bak
|
||||||
|
echo -e "\033[32m脚本设置已还原!(被覆盖的配置已备份!)\033[0m"
|
||||||
|
else
|
||||||
|
echo -e "\033[31m找不到备份文件,请先备份脚本设置!\033[0m"
|
||||||
|
fi
|
||||||
|
elif [ "$num" = 3 ]; then
|
||||||
|
mv -f "$CFG_PATH" "$CFG_PATH".bak
|
||||||
|
. "$CRASHDIR"/init.sh >/dev/null
|
||||||
|
echo -e "\033[32m脚本设置已重置!(旧文件已备份!)\033[0m"
|
||||||
|
fi
|
||||||
|
echo -e "\033[33m请重新启动脚本!\033[0m"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
errornum
|
||||||
|
sleep 1
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
set_redir_mod() { #路由模式设置
|
set_redir_mod() { #路由模式设置
|
||||||
|
|||||||
Reference in New Issue
Block a user