refactor(set_core_config): replace recursion with while loop

This commit is contained in:
Sofia
2026-01-11 17:09:11 +08:00
committed by GitHub
parent 55b8266dfd
commit 56d8bbadc2

View File

@@ -1029,164 +1029,162 @@ set_core_config_link(){ #直接导入配置
fi fi
} }
#配置文件主界面 # 配置文件主界面
set_core_config(){ set_core_config() {
[ -z "$rule_link" ] && rule_link=1 while true; do
[ -z "$server_link" ] && server_link=1 [ -z "$rule_link" ] && rule_link=1
echo "$crashcore" | grep -q 'singbox' && config_path="$JSONSDIR"/config.json || config_path="$YAMLSDIR"/config.yaml [ -z "$server_link" ] && server_link=1
echo "-----------------------------------------------" echo "$crashcore" | grep -q 'singbox' && config_path="$JSONSDIR"/config.json || config_path="$YAMLSDIR"/config.yaml
echo -e "\033[30;47m ShellCrash配置文件管理\033[0m" echo "-----------------------------------------------"
echo "-----------------------------------------------" echo -e "\033[30;47m ShellCrash配置文件管理\033[0m"
echo -e " 1 在线\033[32m生成配置文件\033[0m(基于Subconverter订阅转换)" echo "-----------------------------------------------"
if [ -f "$CRASHDIR"/v2b_api.sh ];then echo -e " 1 在线\033[32m生成配置文件\033[0m(基于Subconverter订阅转换)"
echo -e " 2 登录\033[33m获取订阅(推荐!)\033[0m" if [ -f "$CRASHDIR"/v2b_api.sh ]; then
else echo -e " 2 登录\033[33m获取订阅(推荐!)\033[0m"
echo -e " 2 在线\033[33m获取配置文件\033[0m(基于订阅提供者)" else
fi echo -e " 2 在线\033[33m获取配置文件\033[0m(基于订阅提供者)"
echo -e " 3 本地\033[32m生成配置文件\033[0m(基于内核providers,推荐!)" fi
echo -e " 4 本地\033[33m上传完整配置文件\033[0m" echo -e " 3 本地\033[32m生成配置文件\033[0m(基于内核providers,推荐!)"
echo -e " 5 设置\033[36m自动更新\033[0m" echo -e " 4 本地\033[33m上传完整配置文件\033[0m"
echo -e " 6 \033[32m自定义\033[0m配置文件" echo -e " 5 设置\033[36m自动更新\033[0m"
echo -e " 7 \033[33m更新\033[0m配置文件" echo -e " 6 \033[32m自定义\033[0m配置文件"
echo -e " 8 \033[36m还原\033[0m配置文件" echo -e " 7 \033[33m更新\033[0m配置文件"
echo -e " 9 自定义浏览器UA \033[32m$user_agent\033[0m" echo -e " 8 \033[36m还原\033[0m配置文件"
echo "-----------------------------------------------" echo -e " 9 自定义浏览器UA \033[32m$user_agent\033[0m"
[ "$inuserguide" = 1 ] || echo -e " 0 返回上级菜单" echo "-----------------------------------------------"
read -p "请输入对应数字 > " num [ "$inuserguide" = 1 ] || echo -e " 0 返回上级菜单"
case "$num" in read -p "请输入对应数字 > " num
0) case "$num" in
;; "" | 0)
1) break
if [ -n "$Url" ];then ;;
echo "-----------------------------------------------" 1)
echo -e "\033[33m检测到已记录的链接内容\033[0m" if [ -n "$Url" ]; then
echo -e "\033[4;32m$Url\033[0m" echo "-----------------------------------------------"
echo "-----------------------------------------------" echo -e "\033[33m检测到已记录的链接内容\033[0m"
read -p "清空链接/追加导入?[1/0] > " res echo -e "\033[4;32m$Url\033[0m"
if [ "$res" = '1' ]; then echo "-----------------------------------------------"
Url_link="" read -p "清空链接/追加导入?[1/0] > " res
echo "-----------------------------------------------" if [ "$res" = '1' ]; then
echo -e "\033[31m链接已清空\033[0m" Url_link=""
else echo "-----------------------------------------------"
Url_link=$Url echo -e "\033[31m链接已清空\033[0m"
fi else
fi Url_link=$Url
gen_core_config_link fi
set_core_config fi
;; gen_core_config_link
2) ;;
if [ -f "$CRASHDIR"/v2b_api.sh ];then 2)
. "$CRASHDIR"/v2b_api.sh if [ -f "$CRASHDIR"/v2b_api.sh ]; then
set_core_config . "$CRASHDIR"/v2b_api.sh
else else
set_core_config_link set_core_config_link
fi fi
set_core_config ;;
;; 3)
3) if [ "$crashcore" = meta -o "$crashcore" = clashpre ]; then
if [ "$crashcore" = meta -o "$crashcore" = clashpre ];then coretype=clash
coretype=clash setproviders
setproviders elif [ "$crashcore" = singboxr ]; then
elif [ "$crashcore" = singboxr ];then coretype=singbox
coretype=singbox setproviders
setproviders else
else echo -e "\033[33msingbox官方内核及Clash基础内核不支持此功能请先更换内核\033[0m"
echo -e "\033[33msingbox官方内核及Clash基础内核不支持此功能请先更换内核\033[0m" sleep 1
sleep 1 checkupdate && setcore
checkupdate && setcore fi
fi ;;
set_core_config 4)
;; echo "-----------------------------------------------"
4) echo -e "\033[33m请将本地配置文件上传到/tmp目录并重命名为config.yaml或者config.json\033[0m"
echo "-----------------------------------------------" echo -e "\033[32m之后重新运行本脚本即可自动弹出导入提示\033[0m"
echo -e "\033[33m请将本地配置文件上传到/tmp目录并重命名为config.yaml或者config.json\033[0m" sleep 2
echo -e "\033[32m之后重新运行本脚本即可自动弹出导入提示\033[0m" exit
exit ;;
;; 5)
5) . "$CRASHDIR"/menus/5_task.sh && task_menu
. "$CRASHDIR"/menus/5_task.sh && task_menu break
set_core_config ;;
;; 6)
6) checkcfg=$(cat $CFG_PATH)
checkcfg=$(cat $CFG_PATH) override
override if [ -n "$PID" ]; then
if [ -n "$PID" ];then checkcfg_new=$(cat $CFG_PATH)
checkcfg_new=$(cat $CFG_PATH) [ "$checkcfg" != "$checkcfg_new" ] && checkrestart
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart fi
fi ;;
set_core_config 7)
;; if [ -z "$Url" -a -z "$Https" ]; then
7) echo "-----------------------------------------------"
if [ -z "$Url" -a -z "$Https" ];then echo -e "\033[31m没有找到你的配置文件/订阅链接!请先输入链接!\033[0m"
echo "-----------------------------------------------" sleep 1
echo -e "\033[31m没有找到你的配置文件/订阅链接!请先输入链接!\033[0m" else
sleep 1 echo "-----------------------------------------------"
set_core_config echo -e "\033[33m当前系统记录的链接为\033[0m"
else echo -e "\033[4;32m$Url$Https\033[0m"
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[33m当前系统记录的链接为\033[0m" read -p "确认更新配置文件?[1/0] > " res
echo -e "\033[4;32m$Url$Https\033[0m" if [ "$res" = '1' ]; then
echo "-----------------------------------------------" jump_core_config
read -p "确认更新配置文件?[1/0] > " res break
if [ "$res" = '1' ]; then fi
jump_core_config fi
else ;;
set_core_config 8)
fi if [ ! -f ${config_path}.bak ]; then
fi echo "-----------------------------------------------"
;; echo -e "\033[31m没有找到配置文件的备份\033[0m"
8) else
if [ ! -f ${config_path}.bak ];then echo "-----------------------------------------------"
echo "-----------------------------------------------" echo -e 备份文件共有"\033[32m$(wc -l <${config_path}.bak)\033[0m"行内容,当前文件共有"\033[32m$(wc -l <${config_path})\033[0m"行内容
echo -e "\033[31m没有找到配置文件的备份\033[0m" read -p "确认还原配置文件?此操作不可逆![1/0] > " res
set_core_config if [ "$res" = '1' ]; then
else mv ${config_path}.bak ${config_path}
echo "-----------------------------------------------" echo "----------------------------------------------"
echo -e 备份文件共有"\033[32m`wc -l < ${config_path}.bak`\033[0m"行内容,当前文件共有"\033[32m`wc -l < ${config_path}`\033[0m"行内容 echo -e "\033[32m配置文件已还原请手动重启服务\033[0m"
read -p "确认还原配置文件?此操作不可逆![1/0] > " res sleep 1
if [ "$res" = '1' ]; then break
mv ${config_path}.bak ${config_path} else
echo "----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[32m配置文件已还原请手动重启服务\033[0m" echo -e "\033[31m操作已取消返回上级菜单\033[0m"
sleep 1 sleep 1
else fi
echo "-----------------------------------------------" fi
echo -e "\033[31m操作已取消返回上级菜单\033[0m" ;;
set_core_config 9)
fi echo "-----------------------------------------------"
fi echo -e "\033[36m如果6-1或者6-2无法正确获取配置文件时可以尝试使用\033[0m"
;; echo -e " 1 使用自动UA"
9) echo -e " 2 不使用UA"
echo "-----------------------------------------------" echo -e " 3 使用自定义UA\033[32m$user_agent\033[0m"
echo -e "\033[36m如果6-1或者6-2无法正确获取配置文件时可以尝试使用\033[0m" echo "-----------------------------------------------"
echo -e " 1 使用自动UA" read -p "请输入对应数字 > " num
echo -e " 2 不使用UA" case "$num" in
echo -e " 3 使用自定义UA\033[32m$user_agent\033[0m" 0)
echo "-----------------------------------------------" user_agent=''
read -p "请输入对应数字 > " num ;;
case "$num" in 1)
0) user_agent='auto'
user_agent='' ;;
;; 2)
1) user_agent='none'
user_agent='auto' ;;
;; 3)
2) read -p "请输入自定义UA(不要包含空格和特殊符号!) > " text
user_agent='none' [ -n "$text" ] && user_agent="$text"
;; ;;
3) *)
read -p "请输入自定义UA(不要包含空格和特殊符号!) > " text errornum
[ -n "$text" ] && user_agent="$text" ;;
;; esac
*) [ "$num" -le 3 ] && setconfig user_agent "$user_agent"
errornum ;;
;; *)
esac errornum
[ "$num" -le 3 ] && setconfig user_agent "$user_agent" sleep 1
set_core_config break
;; ;;
*) esac
errornum done
;;
esac
} }