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