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

refactor(setgroups): replace recursion with while loop
This commit is contained in:
juewuy
2026-01-17 17:41:11 +08:00
committed by GitHub

View File

@@ -160,22 +160,24 @@ setrules() {
done done
} }
setgroups(){ #自定义clash策略组 # 自定义clash策略组
setgroups() {
set_group_type() { set_group_type() {
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[33m注意策略组名称必须和【自定义规则】或【自定义节点】功能中指定的策略组一致\033[0m" echo -e "\033[33m注意策略组名称必须和【自定义规则】或【自定义节点】功能中指定的策略组一致\033[0m"
echo -e "\033[33m建议先创建策略组之后可在【自定义规则】或【自定义节点】功能中智能指定\033[0m" echo -e "\033[33m建议先创建策略组之后可在【自定义规则】或【自定义节点】功能中智能指定\033[0m"
echo -e "\033[33m如需在当前策略组下添加节点请手动编辑$YAMLSDIR/proxy-groups.yaml\033[0m" echo -e "\033[33m如需在当前策略组下添加节点请手动编辑$YAMLSDIR/proxy-groups.yaml\033[0m"
read -p "请输入自定义策略组名称(不支持纯数字且不要包含特殊字符!) > " new_group_name read -pr "请输入自定义策略组名称(不支持纯数字且不要包含特殊字符!) > " new_group_name
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[32m请选择策略组【$new_group_name】的类型!\033[0m" echo -e "\033[32m请选择策略组【$new_group_name】的类型!\033[0m"
echo $group_type_cn | awk '{for(i=1;i<=NF;i++){print i" "$i}}' echo "$group_type_cn" | awk '{for(i=1;i<=NF;i++){print i" "$i}}'
read -p "请输入对应数字 > " num read -pr "请输入对应数字 > " num
new_group_type=$(echo $group_type | awk '{print $'"$num"'}') new_group_type=$(echo "$group_type" | awk '{print $'"$num"'}')
if [ "$num" = "1" ]; then if [ "$num" = "1" ]; then
unset new_group_url interval unset new_group_url interval
else else
read -p "请输入测速地址回车则默认使用https://www.gstatic.com/generate_204 > " new_group_url read -pr "请输入测速地址回车则默认使用https://www.gstatic.com/generate_204 > " new_group_url
[ -z "$new_group_url" ] && new_group_url=https://www.gstatic.com/generate_204 [ -z "$new_group_url" ] && new_group_url=https://www.gstatic.com/generate_204
new_group_url="url: '$new_group_url'" new_group_url="url: '$new_group_url'"
interval="interval: 300" interval="interval: 300"
@@ -195,20 +197,21 @@ EOF
echo -e "\033[32m添加成功\033[0m" echo -e "\033[32m添加成功\033[0m"
} }
set_group_add() { set_group_add() {
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[36m请选择想要将本策略添加到的策略组\033[0m" echo -e "\033[36m请选择想要将本策略添加到的策略组\033[0m"
echo -e "\033[32m如需添加到多个策略组请一次性输入多个数字并用空格隔开\033[0m" echo -e "\033[32m如需添加到多个策略组请一次性输入多个数字并用空格隔开\033[0m"
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo $proxy_group | awk -F '#' '{for(i=1;i<=NF;i++){print i" "$i}}' echo "$proxy_group" | awk -F '#' '{for(i=1;i<=NF;i++){print i" "$i}}'
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e " 0 跳过添加" echo -e " 0 跳过添加"
read -p "请输入对应数字(多个用空格隔开) > " char read -pr "请输入对应数字(多个用空格隔开) > " char
case "$char" in case "$char" in
0) ;; "" | 0) ;;
*) *)
for num in $char; do for num in $char; do
rule_group_set=$(echo $proxy_group|cut -d'#' -f$num) rule_group_set=$(echo "$proxy_group" | cut -d'#' -f"$num")
rule_group_add="${rule_group_add}#${rule_group_set}" rule_group_add="${rule_group_add}#${rule_group_set}"
done done
if [ -n "$rule_group_add" ]; then if [ -n "$rule_group_add" ]; then
@@ -216,10 +219,13 @@ EOF
unset rule_group_add unset rule_group_add
else else
errornum errornum
sleep 1
fi fi
;; ;;
esac esac
} }
while true; do
echo "-----------------------------------------------" echo "-----------------------------------------------"
echo -e "\033[33m你可以在这里快捷管理自定义策略组\033[0m" echo -e "\033[33m你可以在这里快捷管理自定义策略组\033[0m"
echo -e "\033[36m如需修改或批量操作请手动编辑$YAMLSDIR/proxy-groups.yaml\033[0m" echo -e "\033[36m如需修改或批量操作请手动编辑$YAMLSDIR/proxy-groups.yaml\033[0m"
@@ -228,32 +234,33 @@ EOF
echo -e " 2 查看自定义策略组" echo -e " 2 查看自定义策略组"
echo -e " 3 清空自定义策略组" echo -e " 3 清空自定义策略组"
echo -e " 0 返回上级菜单" echo -e " 0 返回上级菜单"
read -p "请输入对应数字 > " num read -pr "请输入对应数字 > " num
case "$num" in case "$num" in
0) "" | 0)
break
;; ;;
1) 1)
group_type="select url-test fallback load-balance" group_type="select url-test fallback load-balance"
group_type_cn="手动选择 自动选择 故障转移 负载均衡" group_type_cn="手动选择 自动选择 故障转移 负载均衡"
proxy_group="$(cat "$YAMLSDIR"/proxy-groups.yaml "$YAMLSDIR"/config.yaml 2>/dev/null | sed "/#自定义策略组开始/,/#自定义策略组结束/d" | grep -Ev '^#' | grep -o '\- name:.*' | sed 's/#.*//' | sed 's/- name: /#/g' | tr -d '\n' | sed 's/#//')" proxy_group="$(cat "$YAMLSDIR"/proxy-groups.yaml "$YAMLSDIR"/config.yaml 2>/dev/null | sed "/#自定义策略组开始/,/#自定义策略组结束/d" | grep -Ev '^#' | grep -o '\- name:.*' | sed 's/#.*//' | sed 's/- name: /#/g' | tr -d '\n' | sed 's/#//')"
set_group_type set_group_type
setgroups
;; ;;
2) 2)
echo "-----------------------------------------------" echo "-----------------------------------------------"
cat "$YAMLSDIR"/proxy-groups.yaml cat "$YAMLSDIR"/proxy-groups.yaml
setgroups
;; ;;
3) 3)
read -p "确认清空全部自定义策略组?(1/0) > " res read -p "确认清空全部自定义策略组?(1/0) > " res
[ "$res" = "1" ] && echo '#用于添加自定义策略组' >"$YAMLSDIR"/proxy-groups.yaml [ "$res" = "1" ] && echo '#用于添加自定义策略组' >"$YAMLSDIR"/proxy-groups.yaml
setgroups
;; ;;
*) *)
errornum errornum
sleep 1
;; ;;
esac esac
done
} }
setproxies(){ #自定义clash节点 setproxies(){ #自定义clash节点
set_proxy_type(){ set_proxy_type(){
echo "-----------------------------------------------" echo "-----------------------------------------------"