File size: 2,998 Bytes
7df4e2e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/bin/bash

# Clash API地址
api_url="http://localhost:9090"
Secret="填写Clash Secret"

# 获取Clash代理节点列表
get_proxy_list() {
    # 使用您的命令获取代理节点列表
    proxies=$(curl -s -XGET -H "Content-Type: application/json" -H "Authorization: Bearer ${Secret}" $api_url/proxies | jq -r '.proxies.Proxy.all[]')
}

# 获取Clash代理模式列表
get_mode_list() {
    # 使用您的命令获取代理模式列表,例如:
    # modes=$(your_command_to_get_mode_list)
    # 将代理模式列表保存到变量modes中
    modes=("Global" "Rule")
}

# 显示菜单选项
show_menu() {
    echo "========== Clash代理配置 =========="
    echo "1. 选择代理模式"
    echo "2. 选择代理节点"
    echo "3. 退出"
    echo "==================================="
}

# 选择代理节点
select_proxy() {
    local mode=$1
    if [ -z $mode ]; then
	mode="Proxy"
    fi
    get_proxy_list
    echo "========== 代理节点列表 =========="
    i=1
    for proxy in $proxies; do
        echo "$i. $proxy"
        i=$((i+1))
    done
    echo "==================================="
    read -p "请选择代理节点(输入编号):" proxy_index
    proxy=$(echo "$proxies" | sed -n "${proxy_index}p")
    if [[ -n $proxy ]]; then
        # 更新Clash的代理节点设置
        curl -X PUT -s "$api_url/proxies/$mode" -H "Content-Type: application/json" -H "Authorization: Bearer ${Secret}" --data "{\"name\":\"$proxy\"}" > /dev/null
	
        echo "代理节点已更新为:$proxy"
    else
        echo "无效的选择!"
    fi
}

# 选择代理模式
select_mode() {
    get_mode_list
    echo "========== 代理模式列表 =========="
    i=1
    #for mode in $modes; do
    for mode in ${modes[@]}; do
        echo "$i. $mode"
        i=$((i+1))
    done
    echo "==================================="
    read -p "请选择代理模式(输入编号):" mode_index
    mode=$(echo "${modes[$(($mode_index -1))]}") 
    if [[ -n $mode ]]; then
        # 更新Clash的代理模式设置
        curl -XPATCH -s "$api_url/configs" -H "Content-Type: application/json" -H "Authorization: Bearer ${Secret}" -d '{"mode":"'"${mode}"'"}' > /dev/null
        echo "代理模式已更新为:$mode"

        # 根据新的代理模式更新节点配置
        update_nodes "$mode"
    else
        echo "无效的选择!"
    fi
}

update_nodes() {
    local mode=$1
    if [ $mode == "Rule" ]; then
    	mode=Proxy
	select_proxy $mode
    fi
    if [ $mode == "Global" ]; then
    	mode=GLOBAL
	select_proxy $mode
    fi
    # 根据代理模式更新节点配置
    # TODO: 根据实际需求进行更新节点配置的操作
    echo "已根据代理模式 $mode 更新节点配置"
}

# 主程序
while true; do
    show_menu
    read -p "请选择操作(输入编号):" choice
    case $choice in
        1) select_mode;;
        2) select_proxy;;
        3) break;;
        *) echo "无效的选择!";;
    esac
    echo
done