diff --git a/bin/ShellClash.tar.gz b/bin/ShellClash.tar.gz index 3e1b412..1872de5 100644 Binary files a/bin/ShellClash.tar.gz and b/bin/ShellClash.tar.gz differ diff --git a/bin/clash.net/clash-linux-386 b/bin/clash.net/clash-linux-386 deleted file mode 100755 index 43655c7..0000000 Binary files a/bin/clash.net/clash-linux-386 and /dev/null differ diff --git a/bin/clash.net/clash-linux-amd64 b/bin/clash.net/clash-linux-amd64 deleted file mode 100755 index 3921901..0000000 Binary files a/bin/clash.net/clash-linux-amd64 and /dev/null differ diff --git a/bin/clash.net/clash-linux-armv5 b/bin/clash.net/clash-linux-armv5 deleted file mode 100755 index ee1a1da..0000000 Binary files a/bin/clash.net/clash-linux-armv5 and /dev/null differ diff --git a/bin/clash.net/clash-linux-armv7 b/bin/clash.net/clash-linux-armv7 deleted file mode 100755 index 09f67cf..0000000 Binary files a/bin/clash.net/clash-linux-armv7 and /dev/null differ diff --git a/bin/clash.net/clash-linux-armv8 b/bin/clash.net/clash-linux-armv8 deleted file mode 100755 index 8de50ce..0000000 Binary files a/bin/clash.net/clash-linux-armv8 and /dev/null differ diff --git a/bin/clash.net/clash-linux-mips-softfloat b/bin/clash.net/clash-linux-mips-softfloat deleted file mode 100755 index a11ce2f..0000000 Binary files a/bin/clash.net/clash-linux-mips-softfloat and /dev/null differ diff --git a/bin/clash.net/clash-linux-mipsle-hardfloat b/bin/clash.net/clash-linux-mipsle-hardfloat deleted file mode 100755 index 4d4653b..0000000 Binary files a/bin/clash.net/clash-linux-mipsle-hardfloat and /dev/null differ diff --git a/bin/clash.net/clash-linux-mipsle-softfloat b/bin/clash.net/clash-linux-mipsle-softfloat deleted file mode 100755 index 8178ab5..0000000 Binary files a/bin/clash.net/clash-linux-mipsle-softfloat and /dev/null differ diff --git a/bin/clashfm.tar.gz b/bin/clashfm.tar.gz index 1fcdc0d..fffca12 100644 Binary files a/bin/clashfm.tar.gz and b/bin/clashfm.tar.gz differ diff --git a/bin/clash.meta/clash-linux-amd64 b/bin/meta/clash-linux-amd64 old mode 100755 new mode 100644 similarity index 100% rename from bin/clash.meta/clash-linux-amd64 rename to bin/meta/clash-linux-amd64 diff --git a/bin/clash.meta/clash-linux-armv5 b/bin/meta/clash-linux-armv5 old mode 100755 new mode 100644 similarity index 100% rename from bin/clash.meta/clash-linux-armv5 rename to bin/meta/clash-linux-armv5 diff --git a/bin/clash.meta/clash-linux-armv7 b/bin/meta/clash-linux-armv7 old mode 100755 new mode 100644 similarity index 100% rename from bin/clash.meta/clash-linux-armv7 rename to bin/meta/clash-linux-armv7 diff --git a/bin/clash.meta/clash-linux-armv8 b/bin/meta/clash-linux-armv8 old mode 100755 new mode 100644 similarity index 100% rename from bin/clash.meta/clash-linux-armv8 rename to bin/meta/clash-linux-armv8 diff --git a/bin/clash.meta/clash-linux-mips-softfloat b/bin/meta/clash-linux-mips-softfloat old mode 100755 new mode 100644 similarity index 100% rename from bin/clash.meta/clash-linux-mips-softfloat rename to bin/meta/clash-linux-mips-softfloat diff --git a/bin/clash.meta/clash-linux-mipsle-hardfloat b/bin/meta/clash-linux-mipsle-hardfloat old mode 100755 new mode 100644 similarity index 100% rename from bin/clash.meta/clash-linux-mipsle-hardfloat rename to bin/meta/clash-linux-mipsle-hardfloat diff --git a/bin/clash.meta/clash-linux-mipsle-softfloat b/bin/meta/clash-linux-mipsle-softfloat old mode 100755 new mode 100644 similarity index 100% rename from bin/clash.meta/clash-linux-mipsle-softfloat rename to bin/meta/clash-linux-mipsle-softfloat diff --git a/bin/public.tar.gz b/bin/public.tar.gz index 167054a..fbc0225 100644 Binary files a/bin/public.tar.gz and b/bin/public.tar.gz differ diff --git a/bin/version b/bin/version index 43bcef0..d711efa 100644 --- a/bin/version +++ b/bin/version @@ -2,5 +2,5 @@ clashnet_v=v1.7.6 clashpre_v=2022.11.25 clash_v=v1.7.1 meta_v=v1.17.0 -versionsh=1.8.1 GeoIP_v=20231230 +versionsh=1.8.2d diff --git a/public/task.list b/public/task.list new file mode 100644 index 0000000..e41f443 --- /dev/null +++ b/public/task.list @@ -0,0 +1,16 @@ +#任务ID#任务命令#任务说明(#号隔开,任务命令和说明中都不允许包含#号) + +101#$clashdir/start.sh start#启动clash服务 +102#$clashdir/start.sh stop#停止clash服务 +103#$clashdir/start.sh restart#重启clash服务 +104#$clashdir/start.sh getyaml && $clashdir/start.sh restart#更新订阅并重启服务 +105#$clashdir/start.sh updateyaml#热更新订阅 +106#$clashdir/start.sh web_save#自动保存面板配置 +107#$clashdir/start.sh ntp#自动同步ntp时间 + +111#$clashdir/task/task.sh update_core#自动更新内核 +112#$clashdir/task/task.sh update_shellclash#自动更新脚本 +113#$clashdir/task/task.sh update_mmdb#自动更新数据库文件 + +121#$clashdir/task/task.sh reset_firewall#重设透明路由防火墙 + diff --git a/scripts/clash.sh b/scripts/clash.sh index f96bcbc..ecc1b23 100644 --- a/scripts/clash.sh +++ b/scripts/clash.sh @@ -1,9 +1,9 @@ #!/bin/sh # Copyright (C) Juewuy -CFG_PATH=$clashdir/configs/ShellClash.cfg -YAMLSDIR=$clashdir/yamls -TMPDIR=/tmp/ShellClash && [ ! -f $TMPDIR ] && mkdir -p $TMPDIR +CFG_PATH=$CRASHDIR/configs/ShellCrash.cfg +YAMLSDIR=$CRASHDIR/yamls +TMPDIR=/tmp/ShellCrash && [ ! -f $TMPDIR ] && mkdir -p $TMPDIR #读取配置相关 setconfig(){ #参数1代表变量名,参数2代表变量值,参数3即文件路径 @@ -16,7 +16,7 @@ ckcmd(){ ckstatus(){ #服务器缺省地址 - [ -z "$update_url" ] && update_url=https://fastly.jsdelivr.net/gh/juewuy/ShellClash + [ -z "$update_url" ] && update_url=https://fastly.jsdelivr.net/gh/juewuy/ShellCrash #检查/读取脚本配置文件 if [ -f $CFG_PATH ];then #检查重复行并去除 @@ -26,13 +26,13 @@ ckstatus(){ #使用source加载配置文件 source $CFG_PATH > /dev/null else - mkdir -p $clashdir/configs + mkdir -p $CRASHDIR/configs echo '#标识clash运行状态的文件,不明勿动!' > $CFG_PATH fi - versionsh=$(cat $clashdir/init.sh | grep -E ^version= | head -n 1 | sed 's/version=//') + versionsh=$(cat $CRASHDIR/init.sh | grep -E ^version= | head -n 1 | sed 's/version=//') [ -n "$versionsh" ] && versionsh_l=$versionsh #设置默认核心资源目录 - [ -z "$bindir" ] && bindir=$clashdir + [ -z "$bindir" ] && bindir=$CRASHDIR #设置默认端口及变量 [ -z "$mix_port" ] && mix_port=7890 [ -z "$redir_port" ] && redir_port=7892 @@ -42,14 +42,14 @@ ckstatus(){ [ -z "$local_proxy" ] && local_proxy=未开启 [ -z "$redir_mod" ] && redir_mod=纯净模式 #检查mac地址记录 - [ ! -f $clashdir/configs/mac ] && touch $clashdir/configs/mac + [ ! -f $CRASHDIR/configs/mac ] && touch $CRASHDIR/configs/mac #获取本机host地址 [ -z "$host" ] && host=$(ubus call network.interface.lan status 2>&1 | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}';) [ -z "$host" ] && host=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'lan' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/\/[0-9][0-9].*$//g' | head -n 1) [ -z "$host" ] && host=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/\/[0-9][0-9].*$//g' | head -n 1) [ -z "$host" ] && host='设备IP地址' #dashboard目录位置 - [ -f $clashdir/ui/index.html ] && dbdir=$clashdir/ui && hostdir=":$db_port/ui" + [ -f $CRASHDIR/ui/index.html ] && dbdir=$CRASHDIR/ui && hostdir=":$db_port/ui" [ -f /www/clash/index.html ] && dbdir=/www/clash && hostdir=/clash #开机自启检测 if [ -f /etc/rc.common ];then @@ -57,7 +57,7 @@ ckstatus(){ elif [ -w /etc/systemd/system -o -w /usr/lib/systemd/system ];then [ -n "$(systemctl is-enabled clash.service 2>&1 | grep enable)" ] && autostart=enable || autostart=disable else - [ -f $clashdir/.dis_startup ] && autostart=disable || autostart=enable + [ -f $CRASHDIR/.dis_startup ] && autostart=disable || autostart=enable fi #开机自启描述 if [ "$autostart" = "enable" ]; then @@ -88,7 +88,7 @@ ckstatus(){ fi #输出状态 echo ----------------------------------------------- - echo -e "\033[30;46m欢迎使用ShellClash!\033[0m 版本:$versionsh_l" + echo -e "\033[30;46m欢迎使用ShellCrash!\033[0m 版本:$versionsh_l" echo -e "Clash服务"$run","$auto"" if [ -n "$PID" ];then echo -e "当前内存占用:\033[44m"$VmRSS"\033[0m,已运行:\033[46;30m"$day"\033[44;37m"$time"\033[0m" @@ -98,12 +98,12 @@ ckstatus(){ #检查新手引导 if [ -z "$userguide" ];then setconfig userguide 1 - source $clashdir/getdate.sh && userguide + source $CRASHDIR/getdate.sh && userguide fi #检查执行权限 - [ ! -x $clashdir/start.sh ] && chmod +x $clashdir/start.sh + [ ! -x $CRASHDIR/start.sh ] && chmod +x $CRASHDIR/start.sh #检查/tmp内核文件 - for file in `ls -F /tmp | grep -v [/\$] | grep -v '\ ' | grep -Ev ".*[(gz)(zip)(7z)(tar)(xz)]$" | grep -iE '^clash$|^clash-linux*|^clash.meta*'` ; do + for file in `ls -F /tmp | grep -v [/\$] | grep -v '\ ' | grep -Ev ".*[(gz)(zip)(7z)(tar)(xz)]$" | grep -iE '^clash$|^clash-linux*|^mihomo*|^clash.meta*'` ; do file=/tmp/$file chmod +x $file tmp_version=$($file -v 2>/dev/null) @@ -117,7 +117,7 @@ ckstatus(){ read -p "请手动确定该内核类型 > " num case "$num" in 2) clashcore=clashpre ;; - 3) clashcore=clash.meta ;; + 3) clashcore=meta ;; *) clashcore=clash ;; esac mv -f $file $bindir/clash && echo -e "\033[32m内核加载完成!\033[0m " && sleep 1 @@ -139,7 +139,7 @@ ckstatus(){ echo -e "发现可用的YAML配置文件: \033[36m$file\033[0m " read -p "加载为yaml配置文件/或者移除该文件?(1/0) > " res [ "$res" = 1 ] && { - mv -f $file $clashdir/yamls/config.yaml + mv -f $file $CRASHDIR/yamls/config.yaml echo -e "\033[32m配置文件加载完成!\033[0m " sleep 1 } @@ -163,10 +163,10 @@ ckstatus(){ #启动相关 errornum(){ echo ----------------------------------------------- - echo -e "\033[31m请输入正确的数字!\033[0m" + echo -e "\033[31m请输入正确的字母或数字!\033[0m" } startover(){ - echo -e "\033[32mclash服务已启动!\033[0m" + echo -e "\033[32m服务已启动!\033[0m" if [ -n "$hostdir" ];then echo -e "请使用 \033[4;32mhttp://$host$hostdir\033[0m 管理内置规则" else @@ -183,20 +183,20 @@ startover(){ clashstart(){ #检查yaml配置文件 echo ----------------------------------------------- - if [ -s $clashdir/yamls/config.yaml -o -n "$Url" -o -n "$Https" ];then - $clashdir/start.sh start + if [ -s $CRASHDIR/yamls/config.yaml -o -n "$Url" -o -n "$Https" ];then + $CRASHDIR/start.sh start sleep 1 [ -n "$(pidof clash)" ] && startover else echo -e "\033[31m没有找到配置文件,请先导入配置文件!\033[0m" - source $clashdir/getdate.sh && clashlink + source $CRASHDIR/getdate.sh && clashlink fi } checkrestart(){ echo ----------------------------------------------- - echo -e "\033[32m检测到已变更的内容,请重启clash服务!\033[0m" + echo -e "\033[32m检测到已变更的内容,请重启服务!\033[0m" echo ----------------------------------------------- - read -p "是否现在重启clash服务?(1/0) > " res + read -p "是否现在重启服务?(1/0) > " res [ "$res" = 1 ] && clashstart } #功能相关 @@ -205,6 +205,7 @@ log_pusher(){ [ -n "$push_Deer" ] && stat_Deer=32m已启用 || stat_Deer=33m未启用 [ -n "$push_bark" ] && stat_bark=32m已启用 || stat_bark=33m未启用 [ -n "$push_Po" ] && stat_Po=32m已启用 || stat_Po=33m未启用 + [ -n "$task_push" ] && task_push=32m已启用 || task_push=33m未启用 [ -n "$device_name" ] && device_s=32m$device_name || device_s=33m未设置 echo ----------------------------------------------- echo -e " 1 查看\033[36m运行日志\033[0m" @@ -212,13 +213,14 @@ log_pusher(){ echo -e " 3 PushDeer推送 ——\033[$stat_Deer\033[0m" echo -e " 4 Bark推送-IOS ——\033[$stat_bark\033[0m" echo -e " 5 Passover推送 ——\033[$stat_Po\033[0m" + echo -e " 6 推送任务日志 ——\033[$task_push\033[0m" echo -e " 9 设置设备名称 ——\033[$device_s\033[0m" echo ----------------------------------------------- read -p "请输入对应数字 > " num case $num in 1) echo ----------------------------------------------- - cat $TMPDIR/ShellClash_log + cat $TMPDIR/ShellCrash.log exit ;; 2) @@ -254,7 +256,7 @@ log_pusher(){ push_TG=$TOKEN setconfig push_TG $TOKEN setconfig chat_ID $chat_ID - $clashdir/start.sh logger "已完成Telegram日志推送设置!" 32 + $CRASHDIR/start.sh logger "已完成Telegram日志推送设置!" 32 else echo -e "\033[31m无法获取对话ID,请重新配置!\033[0m" fi @@ -282,7 +284,7 @@ log_pusher(){ if [ -n "$url" ];then push_Deer=$url setconfig push_Deer $url - $clashdir/start.sh logger "已完成PushDeer日志推送设置!" 32 + $CRASHDIR/start.sh logger "已完成PushDeer日志推送设置!" 32 else echo -e "\033[31m输入错误,请重新输入!\033[0m" fi @@ -310,14 +312,14 @@ log_pusher(){ push_bark=$url setconfig push_bark $url echo ----------------------------------------------- - echo -e "\033[32m例: ?group=ShellClash\033[0m" + echo -e "\033[32m例: ?group=ShellCrash\033[0m" read -p "请输入你的Bark请求参数(默认回车为空) > " param param=$(echo $param | sed 's/\&/\\\&/g') if [ -n "$param" ];then bark_param=$param setconfig bark_param \'$param\' fi - $clashdir/start.sh logger "已完成Bark日志推送设置!" 32 + $CRASHDIR/start.sh logger "已完成Bark日志推送设置!" 32 else echo -e "\033[31m输入错误,请重新输入!\033[0m" fi @@ -353,7 +355,7 @@ log_pusher(){ push_Po_key=$key setconfig push_Po $Token setconfig push_Po_key $key - $clashdir/start.sh logger "已完成Passover日志推送设置!" 32 + $CRASHDIR/start.sh logger "已完成Passover日志推送设置!" 32 else echo -e "\033[31m输入错误,请重新输入!\033[0m" fi @@ -366,6 +368,12 @@ log_pusher(){ sleep 1 log_pusher ;; + 6) + [ "$task_push" = 1 ] && task_push= || task_push=1 + setconfig task_push $task_push + sleep 1 + log_pusher + ;; 9) read -p "请输入本设备自定义推送名称 > " device_name setconfig device_name $device_name @@ -761,7 +769,7 @@ macfilter(){ add_mac(){ echo ----------------------------------------------- echo 已添加的mac地址: - cat $clashdir/configs/mac + cat $CRASHDIR/configs/mac echo ----------------------------------------------- echo -e "\033[33m序号 设备IP 设备mac地址 设备名称\033[32m" cat $dhcpdir | awk '{print " "NR" "$3,$2,$4}' @@ -773,8 +781,8 @@ macfilter(){ if [ -z "$num" -o "$num" = 0 ]; then i= elif [ -n "$(echo $num | grep -aE '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$')" ];then - if [ -z "$(cat $clashdir/configs/mac | grep -E "$num")" ];then - echo $num | grep -oE '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$' >> $clashdir/configs/mac + if [ -z "$(cat $CRASHDIR/configs/mac | grep -E "$num")" ];then + echo $num | grep -oE '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$' >> $CRASHDIR/configs/mac else echo ----------------------------------------------- echo -e "\033[31m已添加的设备,请勿重复添加!\033[0m" @@ -782,8 +790,8 @@ macfilter(){ add_mac elif [ $num -le $(cat $dhcpdir 2>/dev/null | awk 'END{print NR}') ]; then macadd=$(cat $dhcpdir | awk '{print $2}' | sed -n "$num"p) - if [ -z "$(cat $clashdir/configs/mac | grep -E "$macadd")" ];then - echo $macadd >> $clashdir/configs/mac + if [ -z "$(cat $CRASHDIR/configs/mac | grep -E "$macadd")" ];then + echo $macadd >> $CRASHDIR/configs/mac else echo ----------------------------------------------- echo -e "\033[31m已添加的设备,请勿重复添加!\033[0m" @@ -797,12 +805,12 @@ macfilter(){ } del_mac(){ echo ----------------------------------------------- - if [ -z "$(cat $clashdir/configs/mac)" ];then + if [ -z "$(cat $CRASHDIR/configs/mac)" ];then echo -e "\033[31m列表中没有需要移除的设备!\033[0m" else echo -e "\033[33m序号 设备IP 设备mac地址 设备名称\033[0m" i=1 - for mac in $(cat $clashdir/configs/mac); do + for mac in $(cat $CRASHDIR/configs/mac); do dev_ip=$(cat $dhcpdir | grep $mac | awk '{print $3}') && [ -z "$dev_ip" ] && dev_ip='000.000.00.00' dev_mac=$(cat $dhcpdir | grep $mac | awk '{print $2}') && [ -z "$dev_mac" ] && dev_mac=$mac dev_name=$(cat $dhcpdir | grep $mac | awk '{print $4}') && [ -z "$dev_name" ] && dev_name='未知设备' @@ -814,8 +822,8 @@ macfilter(){ read -p "请输入需要移除的设备的对应序号 > " num if [ -z "$num" ]||[ "$num" -le 0 ]; then n= - elif [ $num -le $(cat $clashdir/configs/mac | wc -l) ];then - sed -i "${num}d" $clashdir/configs/mac + elif [ $num -le $(cat $CRASHDIR/configs/mac | wc -l) ];then + sed -i "${num}d" $CRASHDIR/configs/mac echo ----------------------------------------------- echo -e "\033[32m对应设备已移除!\033[0m" del_mac @@ -844,11 +852,11 @@ macfilter(){ echo -e "\033[30;47m请在此添加或移除设备\033[0m" echo -e "当前过滤方式为:\033[33m$macfilter_type模式\033[0m" echo -e "仅列表内设备\033[36m$macfilter_scrip经过\033[0mClash内核" - if [ -n "$(cat $clashdir/configs/mac)" ]; then + if [ -n "$(cat $CRASHDIR/configs/mac)" ]; then echo ----------------------------------------------- echo -e "当前已过滤设备为:\033[36m" echo -e "\033[33m 设备IP 设备mac地址 设备名称\033[0m" - for mac in $(cat $clashdir/configs/mac); do + for mac in $(cat $CRASHDIR/configs/mac); do dev_ip=$(cat $dhcpdir | grep $mac | awk '{print $3}') && [ -z "$dev_ip" ] && dev_ip='000.000.00.00' dev_mac=$(cat $dhcpdir | grep $mac | awk '{print $2}') && [ -z "$dev_mac" ] && dev_mac=$mac dev_name=$(cat $dhcpdir | grep $mac | awk '{print $4}') && [ -z "$dev_name" ] && dev_name='未知设备' @@ -879,7 +887,7 @@ macfilter(){ del_mac macfilter elif [ "$num" = 4 ]; then - :>$clashdir/configs/mac + :>$CRASHDIR/configs/mac echo ----------------------------------------------- echo -e "\033[31m设备列表已清空!\033[0m" macfilter @@ -933,7 +941,7 @@ setboot(){ [ -z "$start_old" ] && start_old=未开启 [ -z "$start_delay" -o "$start_delay" = 0 ] && delay=未设置 || delay=${start_delay}秒 [ "$autostart" = "enable" ] && auto_set="\033[33m禁止" || auto_set="\033[32m允许" - [ "$bindir" = "$clashdir" ] && mini_clash=未开启 || mini_clash=已开启 + [ "$bindir" = "$CRASHDIR" ] && mini_clash=未开启 || mini_clash=已开启 echo ----------------------------------------------- echo -e "\033[30;47m欢迎使用启动设置菜单:\033[0m" echo ----------------------------------------------- @@ -941,7 +949,7 @@ setboot(){ echo -e " 2 使用保守模式: \033[36m$start_old\033[0m ————基于定时任务(每分钟检测)" echo -e " 3 设置自启延时: \033[36m$delay\033[0m ————用于解决自启后服务受限" echo -e " 4 启用小闪存模式: \033[36m$mini_clash\033[0m ————用于闪存空间不足的设备" - [ "$bindir" != "$clashdir" ] && echo -e " 5 设置小闪存目录: \033[36m$bindir\033[0m" + [ "$bindir" != "$CRASHDIR" ] && echo -e " 5 设置小闪存目录: \033[36m$bindir\033[0m" echo ----------------------------------------------- echo -e " 0 \033[0m返回上级菜单\033[0m" read -p "请输入对应数字 > " num @@ -951,13 +959,13 @@ setboot(){ if [ "$autostart" = "enable" ]; then [ -d /etc/rc.d ] && cd /etc/rc.d && rm -rf *clash > /dev/null 2>&1 && cd - >/dev/null ckcmd systemctl && systemctl disable clash.service > /dev/null 2>&1 - touch $clashdir/.dis_startup + touch $CRASHDIR/.dis_startup autostart=disable echo -e "\033[33m已禁止Clash开机启动!\033[0m" elif [ "$autostart" = "disable" ]; then [ -f /etc/rc.common ] && /etc/init.d/clash enable ckcmd systemctl && systemctl enable clash.service > /dev/null 2>&1 - rm -rf $clashdir/.dis_startup + rm -rf $CRASHDIR/.dis_startup autostart=enable echo -e "\033[32m已设置Clash开机启动!\033[0m" fi @@ -965,17 +973,17 @@ setboot(){ ;; 2) if [ "$start_old" = "未开启" ] > /dev/null 2>&1; then - echo -e "\033[33m改为使用保守模式启动clash服务!!\033[0m" + echo -e "\033[33m改为使用保守模式启动服务!!\033[0m" start_old=已开启 setconfig start_old $start_old - $clashdir/start.sh stop + $CRASHDIR/start.sh stop else if [ -f /etc/init.d/clash -o -w /etc/systemd/system -o -w /usr/lib/systemd/system ];then - echo -e "\033[32m改为使用系统守护进程启动clash服务!!\033[0m" - $clashdir/start.sh cronset "ShellClash初始化" + echo -e "\033[32m改为使用系统守护进程启动服务!!\033[0m" + $CRASHDIR/start.sh cronset "ShellCrash初始化" start_old=未开启 setconfig start_old $start_old - $clashdir/start.sh stop + $CRASHDIR/start.sh stop else echo -e "\033[31m当前设备不支持以其他模式启动!!\033[0m" @@ -1002,12 +1010,12 @@ setboot(){ setboot ;; 4) - dir_size=$(df $clashdir |awk '{ for(i=1;i<=NF;i++){ if(NR==1){ arr[i]=$i; }else{ arr[i]=arr[i]" "$i; } } } END{ for(i=1;i<=NF;i++){ print arr[i]; } }' |grep Ava |awk '{print $2}') + dir_size=$(df $CRASHDIR |awk '{ for(i=1;i<=NF;i++){ if(NR==1){ arr[i]=$i; }else{ arr[i]=arr[i]" "$i; } } } END{ for(i=1;i<=NF;i++){ print arr[i]; } }' |grep Ava |awk '{print $2}') if [ "$mini_clash" = "未开启" ]; then if [ "$dir_size" -gt 20480 ];then echo -e "\033[33m您的设备空间充足(>20M),无需开启!\033[0m" else - [ "$bindir" = "$clashdir" ] && bindir="/tmp/clash_$USER" + [ "$bindir" = "$CRASHDIR" ] && bindir="/tmp/clash_$USER" echo -e "\033[32m已经启用小闪存功能!\033[0m" echo -e "如需更换目录,请使用【设置小闪存目录】功能\033[0m" fi @@ -1015,10 +1023,10 @@ setboot(){ if [ "$dir_size" -lt 8192 ];then echo -e "\033[31m您的设备剩余空间不足8M,停用后可能无法正常运行!\033[0m" read -p "确认停用此功能?(1/0) > " res - [ "$res" = 1 ] && bindir="$clashdir" && echo -e "\033[33m已经停用小闪存功能!\033[0m" + [ "$res" = 1 ] && bindir="$CRASHDIR" && echo -e "\033[33m已经停用小闪存功能!\033[0m" else rm -rf /tmp/clash_$USER - bindir="$clashdir" + bindir="$CRASHDIR" echo -e "\033[33m已经停用小闪存功能!\033[0m" fi fi @@ -1083,8 +1091,8 @@ clashcfg(){ setconfig dns_mod $dns_mod if [ "$redir_mod" = "混合模式" -o "$redir_mod" = "Tun模式" ] && [ "$clashcore" = "clash" ];then rm -rf $bindir/clash - rm -rf $clashdir/clash - setconfig clashcore clash.meta + rm -rf $CRASHDIR/clash + setconfig clashcore meta fi echo ----------------------------------------------- echo -e "\033[36m已设为 $redir_mod !!\033[0m" @@ -1094,7 +1102,7 @@ clashcfg(){ ckcmd nft && sup_nft=1 echo ----------------------------------------------- echo -e "当前代理模式为:\033[47;30m $redir_mod \033[0m;Clash核心为:\033[47;30m $clashcore \033[0m" - echo -e "\033[33m切换模式后需要手动重启clash服务以生效!\033[0m" + echo -e "\033[33m切换模式后需要手动重启服务以生效!\033[0m" echo ----------------------------------------------- echo -e " 1 \033[32mRedir模式\033[0m: Redir转发TCP,不转发UDP" echo -e " 2 \033[36m混合模式\033[0m: Redir转发TCP,Tun转发UDP" @@ -1126,7 +1134,7 @@ clashcfg(){ elif [ "$num" = 3 ]; then if [ -f /etc/init.d/qca-nss-ecm -a "$systype" = "mi_snapshot" ] ;then read -p "当前设备的QOS服务与本模式冲突,是否禁用相关功能?(1/0) > " res - [ "$res" = '1' ] && $clashdir/misnap_init.sh tproxyfix && redir_mod=Tproxy混合 + [ "$res" = '1' ] && $CRASHDIR/misnap_init.sh tproxyfix && redir_mod=Tproxy混合 else redir_mod=Tproxy混合 fi @@ -1139,7 +1147,7 @@ clashcfg(){ elif [ "$num" = 5 ]; then if [ -f /etc/init.d/qca-nss-ecm -a "$systype" = "mi_snapshot" ] ;then read -p "当前设备的QOS服务与本模式冲突,是否禁用相关功能?(1/0) > " res - [ "$res" = '1' ] && $clashdir/misnap_init.sh tproxyfix && redir_mod=Tproxy模式 + [ "$res" = '1' ] && $CRASHDIR/misnap_init.sh tproxyfix && redir_mod=Tproxy模式 else redir_mod=Tproxy模式 fi @@ -1181,7 +1189,7 @@ clashcfg(){ set_dns_mod(){ echo ----------------------------------------------- echo -e "当前DNS运行模式为:\033[47;30m $dns_mod \033[0m" - echo -e "\033[33m切换模式后需要手动重启clash服务以生效!\033[0m" + echo -e "\033[33m切换模式后需要手动重启服务以生效!\033[0m" echo ----------------------------------------------- echo -e " 1 fake-ip模式: \033[32m响应速度更快\033[0m" echo -e " 不支持绕过CN-IP功能" @@ -1224,9 +1232,9 @@ clashcfg(){ echo -e "示例:*.b.com" echo -e "示例:*.*.b.com\033[0m" echo ----------------------------------------------- - if [ -s $clashdir/configs/fake_ip_filter ];then + if [ -s $CRASHDIR/configs/fake_ip_filter ];then echo -e "\033[33m已添加Fake-ip过滤地址:\033[0m" - cat $clashdir/configs/fake_ip_filter | awk '{print NR" "$1}' + cat $CRASHDIR/configs/fake_ip_filter | awk '{print NR" "$1}' else echo -e "\033[33m你还未添加Fake-ip过滤地址\033[0m" fi @@ -1237,14 +1245,14 @@ clashcfg(){ 0) ;; '') ;; [0-99]) - sed -i "${input}d" $clashdir/configs/fake_ip_filter 2>/dev/null + sed -i "${input}d" $CRASHDIR/configs/fake_ip_filter 2>/dev/null echo -e "\033[32m移除成功!\033[0m" fake_ip_filter ;; *) echo -e "你输入的地址是:\033[32m$input\033[0m" read -p "确认添加?(1/0) > " res - [ "$res" = 1 ] && echo $input >> $clashdir/configs/fake_ip_filter + [ "$res" = 1 ] && echo $input >> $CRASHDIR/configs/fake_ip_filter fake_ip_filter ;; esac @@ -1257,7 +1265,7 @@ clashcfg(){ [ -z "$cn_ip_route" ] && cn_ip_route=未开启 [ -z "$local_proxy" ] && local_proxy=未开启 [ -z "$quic_rj" ] && quic_rj=未开启 - [ -z "$(cat $clashdir/configs/mac)" ] && mac_return=未开启 || mac_return=已启用 + [ -z "$(cat $CRASHDIR/configs/mac)" ] && mac_return=未开启 || mac_return=已启用 # echo ----------------------------------------------- echo -e "\033[30;47m欢迎使用功能设置菜单:\033[0m" @@ -1325,18 +1333,18 @@ clashcfg(){ } echo ----------------------------------------------- if [ -n "$(pidof clash)" ];then - read -p "切换时将停止clash服务,是否继续?(1/0) > " res - [ "$res" = 1 ] && $clashdir/start.sh stop && set_common_ports + read -p "切换时将停止服务,是否继续?(1/0) > " res + [ "$res" = 1 ] && $CRASHDIR/start.sh stop && set_common_ports else set_common_ports fi clashcfg elif [ "$num" = 5 ]; then - checkcfg_mac=$(cat $clashdir/configs/mac) + checkcfg_mac=$(cat $CRASHDIR/configs/mac) macfilter if [ -n "$PID" ];then - checkcfg_mac_new=$(cat $clashdir/configs/mac) + checkcfg_mac_new=$(cat $CRASHDIR/configs/mac) [ "$checkcfg_mac" != "$checkcfg_mac_new" ] && checkrestart fi clashcfg @@ -1349,7 +1357,7 @@ clashcfg(){ setconfig local_proxy $local_proxy setconfig local_type sed -i '/user shellclash/d' /etc/init.d/clash 2>/dev/null - echo -e "\033[33m已经停用本机代理规则,请尽快重启clash服务!!\033[0m" + echo -e "\033[33m已经停用本机代理规则,请尽快重启服务!!\033[0m" fi sleep 1 clashcfg @@ -1445,7 +1453,7 @@ clashadv(){ if [ "$sniffer" = "未启用" ];then if [ "$clashcore" = "clash" ];then rm -rf $bindir/clash - clashcore=clash.meta + clashcore=meta setconfig clashcore $clashcore echo "已将clash内核切换为Meta内核!域名嗅探依赖Meta或者高版本clashpre内核!" fi @@ -1464,7 +1472,7 @@ clashadv(){ echo ----------------------------------------------- if [ "$proxies_bypass" = "未启用" ];then proxies_bypass=已启用 - echo -e "\033[33m仅当ShellClash与子网络同类应用使用相同节点配置时方可生效!\033[0m" + echo -e "\033[33m仅当ShellCrash与子网络同类应用使用相同节点配置时方可生效!\033[0m" sleep 1 else proxies_bypass=未启用 @@ -1518,8 +1526,8 @@ autoSSH(){ echo -e "\033[33m如有问题请加群反馈:\033[36;4mhttps://t.me/ShellClash\033[0m" read -p "请输入需要还原的SSH密码(不影响当前密码,回车可跳过) > " mi_autoSSH_pwd mi_autoSSH=已配置 - cp -f /etc/dropbear/dropbear_rsa_host_key $clashdir/configs/dropbear_rsa_host_key 2>/dev/null - cp -f /etc/dropbear/authorized_keys $clashdir/configs/authorized_keys 2>/dev/null + cp -f /etc/dropbear/dropbear_rsa_host_key $CRASHDIR/configs/dropbear_rsa_host_key 2>/dev/null + cp -f /etc/dropbear/authorized_keys $CRASHDIR/configs/authorized_keys 2>/dev/null ckcmd nvram && { nvram set ssh_en=1 nvram set telnet_en=1 @@ -1541,7 +1549,7 @@ tools(){ [ -n "$(cat /etc/firewall.user 2>&1 | grep '启用外网访问SSH服务')" ] && ssh_ol=禁止 || ssh_ol=开启 [ -z "$ssh_port" ] && ssh_port=10022 echo ----------------------------------------------- - echo -e "\033[33m此功能仅针对使用Openwrt系统的设备生效,且不依赖clash服务\033[0m" + echo -e "\033[33m此功能仅针对使用Openwrt系统的设备生效,且不依赖服务\033[0m" echo -e "\033[31m本功能不支持红米AX6S等镜像化系统设备,请勿尝试!\033[0m" echo ----------------------------------------------- echo -e " 1 \033[32m修改\033[0m外网访问端口:\033[36m$ssh_port\033[0m" @@ -1600,16 +1608,16 @@ tools(){ #获取设置默认显示 [ -n "$(cat /etc/crontabs/root 2>&1| grep otapredownload)" ] && mi_update=禁用 || mi_update=启用 [ "$mi_autoSSH" = "已配置" ] && mi_autoSSH_type=32m已配置 || mi_autoSSH_type=31m未配置 - [ -f $clashdir/tools/tun.ko ] && mi_tunfix=32m已启用 || mi_tunfix=31m未启用 + [ -f $CRASHDIR/tools/tun.ko ] && mi_tunfix=32m已启用 || mi_tunfix=31m未启用 # echo ----------------------------------------------- echo -e "\033[30;47m欢迎使用其他工具菜单:\033[0m" echo -e "\033[33m本页工具可能无法兼容全部Linux设备,请酌情使用!\033[0m" echo -e "磁盘占用/所在目录:" - du -sh $clashdir + du -sh $CRASHDIR echo ----------------------------------------------- - echo -e " 1 ShellClash\033[33m测试菜单\033[0m" - echo -e " 2 ShellClash\033[32m新手引导\033[0m" + echo -e " 1 ShellCrash\033[33m测试菜单\033[0m" + echo -e " 2 ShellCrash\033[32m新手引导\033[0m" echo -e " 3 \033[36m日志及推送工具\033[0m" [ -f /etc/firewall.user ] && echo -e " 4 \033[32m配置\033[0m外网访问SSH" [ -x /usr/sbin/otapredownload ] && echo -e " 5 \033[33m$mi_update\033[0m小米系统自动更新" @@ -1626,10 +1634,10 @@ tools(){ i= elif [ "$num" = 1 ]; then - source $clashdir/getdate.sh && testcommand + source $CRASHDIR/getdate.sh && testcommand elif [ "$num" = 2 ]; then - source $clashdir/getdate.sh && userguide + source $CRASHDIR/getdate.sh && userguide elif [ "$num" = 3 ]; then log_pusher @@ -1642,17 +1650,17 @@ tools(){ elif [ "$num" = 7 ]; then echo ----------------------------------------------- - if [ ! -f $clashdir/tools/ShellDDNS.sh ];then + if [ ! -f $CRASHDIR/tools/ShellDDNS.sh ];then echo -e "正在获取在线脚本……" - $clashdir/start.sh webget $TMPDIR/ShellDDNS.sh $update_url/tools/ShellDDNS.sh + $CRASHDIR/start.sh webget $TMPDIR/ShellDDNS.sh $update_url/tools/ShellDDNS.sh if [ "$?" = "0" ];then - mv -f $TMPDIR/ShellDDNS.sh $clashdir/tools/ShellDDNS.sh - source $clashdir/tools/ShellDDNS.sh + mv -f $TMPDIR/ShellDDNS.sh $CRASHDIR/tools/ShellDDNS.sh + source $CRASHDIR/tools/ShellDDNS.sh else echo -e "\033[31m文件下载失败!\033[0m" fi else - source $clashdir/tools/ShellDDNS.sh + source $CRASHDIR/tools/ShellDDNS.sh fi sleep 1 tools @@ -1672,10 +1680,10 @@ tools(){ fi tools elif [ "$num" = 8 ]; then - if [ -f $clashdir/tools/tun.ko ];then + if [ -f $CRASHDIR/tools/tun.ko ];then read -p "是否禁用此功能并移除相关补丁?(1/0) > " res [ "$res" = 1 ] && { - rm -rf $clashdir/tools/tun.ko + rm -rf $CRASHDIR/tools/tun.ko echo -e "\033[33m补丁文件已移除,请立即重启设备以防止出错!\033[0m" } elif [ -z "$(modinfo tun)" ];then @@ -1687,11 +1695,11 @@ tools(){ tunfixlink="${update_url}/bin/fix/tun.ko" echo ----------------------------------------------- echo 正在连接服务器获取Tun模块补丁文件………… - $clashdir/start.sh webget $TMPDIR/tun.ko $tunfixlink + $CRASHDIR/start.sh webget $TMPDIR/tun.ko $tunfixlink if [ "$?" = "0" ];then - mv -f $TMPDIR/tun.ko $clashdir/tools/tun.ko && \ - $clashdir/misnap_init.sh tunfix && \ - echo -e "\033[32m设置成功!请重启clash服务!\033[0m" + mv -f $TMPDIR/tun.ko $CRASHDIR/tools/tun.ko && \ + $CRASHDIR/misnap_init.sh tunfix && \ + echo -e "\033[32m设置成功!请重启服务!\033[0m" else echo -e "\033[31m文件下载失败,请重试!\033[0m" fi @@ -1705,186 +1713,18 @@ tools(){ errornum fi } -clashcron(){ - croncmd(){ - if [ -n "$(crontab -h 2>&1 | grep '\-l')" ];then - crontab $1 - else - crondir="$(crond -h 2>&1 | grep -oE 'Default:.*' | awk -F ":" '{print $2}')" - [ ! -w "$crondir" ] && crondir="/etc/storage/cron/crontabs" - [ ! -w "$crondir" ] && crondir="/var/spool/cron/crontabs" - [ ! -w "$crondir" ] && crondir="/var/spool/cron" - [ ! -w "$crondir" ] && echo "你的设备不支持定时任务配置,脚本大量功能无法启用,请前往 https://t.me/ShellClash 申请适配!" - [ "$1" = "-l" ] && cat $crondir/$USER 2>/dev/null - [ -f "$1" ] && cat $1 > $crondir/$USER - fi - } - setcron(){ - setcrontab(){ - #设置具体时间 - echo ----------------------------------------------- - read -p "请输入小时(0-23) > " num - if [ -z "$num" ]; then - errornum - setcron - elif [ $num -gt 23 ] || [ $num -lt 0 ]; then - errornum - setcron - else - hour=$num - echo ----------------------------------------------- - read -p "请输入分钟(0-59) > " num - if [ -z "$num" ]; then - errornum - setcron - elif [ $num -gt 59 ] || [ $num -lt 0 ]; then - errornum - setcron - else - min=$num - echo ----------------------------------------------- - echo 将在$week1的$hour点$min分$cronname(旧的任务会被覆盖) - read -p "是否确认添加定时任务?(1/0) > " res - if [ "$res" = '1' ]; then - cronwords="$min $hour * * $week $cronset #$week1的$hour点$min分$cronname" - tmpcron=$TMPDIR/cron_$USER - croncmd -l > $tmpcron - sed -i "/$cronname/d" $tmpcron - sed -i '/^$/d' $tmpcron - echo "$cronwords" >> $tmpcron - croncmd $tmpcron - #华硕/Padavan固件存档在本地,其他则删除 - [ "$clashdir" = "/jffs/clash" -o "$clashdir" = "/etc/storage/clash" ] && mv -f $tmpcron $clashdir/tools/cron || rm -f $tmpcron - echo ----------------------------------------------- - echo -e "\033[31m定时任务已添加!!!\033[0m" - fi - fi - fi - } - echo ----------------------------------------------- - echo -e " 正在设置:\033[32m$cronname\033[0m定时任务" - echo -e " 输入 1~7 对应\033[33m每周的指定某天\033[0m运行" - echo -e " 输入 8 设为\033[33m每天\033[0m定时运行" - echo -e " 输入 1,3,6 代表\033[36m指定每周1,3,6\033[0m运行(小写逗号分隔)" - echo -e " 输入 a,b,c 代表\033[36m指定每周a,b,c\033[0m运行(1<=abc<=7)" - echo ----------------------------------------------- - echo -e " 输入 9 \033[31m删除定时任务\033[0m" - echo -e " 输入 0 返回上级菜单" - echo ----------------------------------------------- - read -p "请输入对应数字 > " num - if [ -z "$num" ]; then - errornum - elif [ "$num" = 0 ]; then - i= - elif [ "$num" = 9 ]; then - croncmd -l > $TMPDIR/conf && sed -i "/$cronname/d" $TMPDIR/conf && croncmd $TMPDIR/conf - sed -i "/$cronname/d" $clashdir/tools/cron 2>/dev/null - rm -f $TMPDIR/conf - echo ----------------------------------------------- - echo -e "\033[31m定时任务:$cronname已删除!\033[0m" - elif [ "$num" = 8 ]; then - week='*' - week1=每天 - echo 已设为每天定时运行! - setcrontab - else - week=$num - week1=每周$week - echo 已设为每周 $num 运行! - setcrontab - fi - } - #定时任务菜单 - echo ----------------------------------------------- - echo -e "\033[30;47m欢迎使用定时任务功能:\033[0m" - echo ----------------------------------------------- - echo -e "\033[33m已添加的定时任务:\033[36m" - croncmd -l | grep -oE ' #.*' - echo -e "\033[0m"----------------------------------------------- - echo -e " 1 设置\033[33m定时重启\033[0mclash服务" - echo -e " 2 设置\033[31m定时停止\033[0mclash服务" - echo -e " 3 设置\033[32m定时开启\033[0mclash服务" - echo -e " 4 设置\033[33m定时更新\033[0m订阅并重启服务" - echo -e " 5 设置\033[33m定时热更新\033[0m订阅" - echo -e " 6 设置\033[36m自定义命令\033[0m" - echo -e " 7 删除\033[31m指定任务\033[0m" - echo ----------------------------------------------- - echo -e " 0 返回上级菜单" - read -p "请输入对应数字 > " num - if [ -z "$num" ]; then - errornum - elif [ "$num" = 0 ]; then - i= - elif [ "$num" = 1 ]; then - cronname=重启clash服务 - cronset="$clashdir/start.sh restart" - setcron - clashcron - elif [ "$num" = 2 ]; then - cronname=停止clash服务 - cronset="$clashdir/start.sh stop" - setcron - clashcron - elif [ "$num" = 3 ]; then - cronname=开启clash服务 - cronset="$clashdir/start.sh start" - setcron - clashcron - elif [ "$num" = 4 ]; then - cronname=更新订阅链接 - cronset="$clashdir/start.sh getyaml && $clashdir/start.sh restart" - setcron - clashcron - elif [ "$num" = 5 ]; then - cronname=更新订阅但不重启 - cronset="$clashdir/start.sh updateyaml" - setcron - clashcron - elif [ "$num" = 6 ]; then - echo ----------------------------------------------- - echo -e "\033[33m可包含空格,请确保命令可执行!\033[0m" - read -p "请输入命令语句 > " script - if [ -n "$script" ];then - cronset=$script - echo -e "请检查输入:\033[32m$cronset\033[0m" - read -p "请输入任务备注 > " txt - [ -n "$txt" ] && cronname=$txt || cronname=ShellClash自定义 - setcron - else - echo -e "\033[31m输入错误,请重新输入!\033[0m" - sleep 1 - fi - clashcron - elif [ "$num" = 7 ]; then - echo ----------------------------------------------- - echo -e "\033[33m将按照关键词匹配并删除所有匹配!\033[0m" - read -p "请输入备注的关键词 > " txt - [ -n "$txt" ] && { - cronname=$txt - croncmd -l > $TMPDIR/conf && sed -i "/$cronname/d" $TMPDIR/conf && croncmd $TMPDIR/conf - sed -i "/$cronname/d" $clashdir/tools/cron 2>/dev/null - rm -f $TMPDIR/conf - echo ----------------------------------------------- - echo -e "所有关键词\033[32m$cronname\033[0m匹配的定时任务均已删除!\033[0m" - sleep 1 - } - clashcron - else - errornum - fi -} #主菜单 clashsh(){ ############################# ckstatus ############################# - echo -e " 1 \033[32m启动/重启\033[0mclash服务" - echo -e " 2 clash\033[33m功能设置\033[0m" - echo -e " 3 \033[31m停止\033[0mclash服务" - echo -e " 4 clash\033[36m启动设置\033[0m" - echo -e " 5 设置\033[33m定时任务\033[0m$cronoff" + echo -e " 1 \033[32m启动/重启\033[0m服务" + echo -e " 2 内核\033[33m功能设置\033[0m" + echo -e " 3 \033[31m停止\033[0m内核服务" + echo -e " 4 内核\033[36m启动设置\033[0m" + echo -e " 5 配置\033[33m自动任务\033[0m" echo -e " 6 导入\033[32m配置文件\033[0m" - echo -e " 7 clash\033[31m进阶设置\033[0m" + echo -e " 7 内核\033[31m进阶设置\033[0m" echo -e " 8 \033[35m其他工具\033[0m" echo -e " 9 \033[36m更新/卸载\033[0m" echo ----------------------------------------------- @@ -1911,7 +1751,7 @@ clashsh(){ clashsh elif [ "$num" = 3 ]; then - $clashdir/start.sh stop + $CRASHDIR/start.sh stop echo ----------------------------------------------- echo -e "\033[31mClash服务已停止!\033[0m" clashsh @@ -1921,11 +1761,11 @@ clashsh(){ clashsh elif [ "$num" = 5 ]; then - clashcron + source $CRASHDIR/task/task.sh && task_menu clashsh elif [ "$num" = 6 ]; then - source $clashdir/getdate.sh && clashlink + source $CRASHDIR/getdate.sh && clashlink clashsh elif [ "$num" = 7 ]; then @@ -1943,7 +1783,7 @@ clashsh(){ elif [ "$num" = 9 ]; then checkcfg=$(cat $CFG_PATH) - source $clashdir/getdate.sh && update + source $CRASHDIR/getdate.sh && update if [ -n "$PID" ];then checkcfg_new=$(cat $CFG_PATH) [ "$checkcfg" != "$checkcfg_new" ] && checkrestart @@ -1956,10 +1796,10 @@ clashsh(){ fi } -[ -z "$clashdir" ] && { +[ -z "$CRASHDIR" ] && { echo 环境变量配置有误!正在初始化~~~ - clashdir=$(cd `dirname $0`; pwd) - source $clashdir/init.sh + CRASHDIR=$(cd `dirname $0`; pwd) + source $CRASHDIR/init.sh sleep 1 echo 请重启SSH窗口以完成初始化! exit @@ -1970,7 +1810,7 @@ clashsh(){ case "$1" in -h) echo ----------------------------------------- - echo "欢迎使用ShellClash" + echo "欢迎使用ShellCrash" echo ----------------------------------------- echo " -t 测试模式" echo " -h 帮助列表" @@ -1982,46 +1822,48 @@ case "$1" in echo ----------------------------------------- echo "在线求助:t.me/ShellClash" echo "官方博客:juewuy.github.io" - echo "发布页面:github.com/juewuy/ShellClash" + echo "发布页面:github.com/juewuy/ShellCrash" echo ----------------------------------------- ;; -t) shtype=sh && [ -n "$(ls -l /bin/sh|grep -o dash)" ] && shtype=bash - $shtype -x $clashdir/clash.sh + $shtype -x $CRASHDIR/clash.sh ;; -s) - $clashdir/start.sh $2 $3 $4 $5 $6 + $CRASHDIR/start.sh $2 $3 $4 $5 $6 ;; -st) shtype=sh && [ -n "$(ls -l /bin/sh|grep -o dash)" ] && shtype=bash - $shtype -x $clashdir/start.sh $2 $3 $4 $5 $6 + $shtype -x $CRASHDIR/start.sh $2 $3 $4 $5 $6 ;; -u) - read -p "确认卸载ShellClash?(警告:该操作不可逆!)[1/0] > " res + read -p "确认卸载ShellCrash?(警告:该操作不可逆!)[1/0] > " res if [ "$res" = '1' ]; then - $clashdir/start.sh stop - $clashdir/start.sh cronset "clash服务" - $clashdir/start.sh cronset "订阅链接" - $clashdir/start.sh cronset "ShellClash初始化" + $CRASHDIR/start.sh stop + $CRASHDIR/start.sh cronset "clash服务" + $CRASHDIR/start.sh cronset "订阅链接" + $CRASHDIR/start.sh cronset "ShellCrash初始化" read -p "是否保留脚本配置及订阅文件?[1/0] > " res if [ "$res" = '1' ]; then - mv -f $clashdir/configs /tmp/clash_$USER - mv -f $clashdir/yamls /tmp/clash_$USER - rm -rf $clashdir/* - mv -f /tmp/clash_$USER/configs $clashdir - mv -f /tmp/clash_$USER/yamls $clashdir + mv -f $CRASHDIR/configs /tmp/clash_$USER + mv -f $CRASHDIR/yamls /tmp/clash_$USER + rm -rf $CRASHDIR/* + mv -f /tmp/clash_$USER/configs $CRASHDIR + mv -f /tmp/clash_$USER/yamls $CRASHDIR else - rm -rf $clashdir + rm -rf $CRASHDIR fi [ -w ~/.bashrc ] && profile=~/.bashrc [ -w /etc/profile ] && profile=/etc/profile sed -i '/alias clash=*/'d $profile - sed -i '/export clashdir=*/'d $profile + sed -i '/alias crash=*/'d $profile + sed -i '/export CRASHDIR=*/'d $profile + sed -i '/export crashdir=*/'d $profile sed -i '/all_proxy/'d $profile sed -i '/ALL_PROXY/'d $profile sed -i "/启用外网访问SSH服务/d" /etc/firewall.user - sed -i '/ShellClash初始化/'d /etc/storage/started_script.sh 2>/dev/null - sed -i '/ShellClash初始化/'d /jffs/.asusrouter 2>/dev/null + sed -i '/ShellCrash初始化/'d /etc/storage/started_script.sh 2>/dev/null + sed -i '/ShellCrash初始化/'d /jffs/.asusrouter 2>/dev/null rm -rf $bindir rm -rf /etc/init.d/clash rm -rf /etc/systemd/system/clash.service @@ -2033,7 +1875,7 @@ case "$1" in nvram set script_usbmount="" 2>/dev/null nvram commit 2>/dev/null echo ----------------------------------------------- - echo -e "\033[36m已卸载ShellClash相关文件!有缘再会!\033[0m" + echo -e "\033[36m已卸载ShellCrash相关文件!有缘再会!\033[0m" echo -e "\033[33m请手动关闭当前窗口以重置环境变量!\033[0m" echo ----------------------------------------------- exit diff --git a/scripts/clashservice b/scripts/clashservice index b7ade0e..51e4d4d 100644 --- a/scripts/clashservice +++ b/scripts/clashservice @@ -6,9 +6,9 @@ SERVICE_DAEMONIZE=1 SERVICE_WRITE_PID=1 USE_PROCD=1 #获取目录 -DIR=$(cat /etc/profile | grep clashdir | awk -F "\"" '{print $2}') -[ -z "$DIR" ] && DIR=$(cat ~/.bashrc | grep clashdir | awk -F "\"" '{print $2}') -BINDIR=$(cat $DIR/configs/ShellClash.cfg | grep bindir | awk -F "=" '{print $2}') +DIR=$(cat /etc/profile | grep CRASHDIR | awk -F "\"" '{print $2}') +[ -z "$DIR" ] && DIR=$(cat ~/.bashrc | grep CRASHDIR | awk -F "\"" '{print $2}') +BINDIR=$(cat $DIR/configs/ShellCrash.cfg | grep bindir | awk -F "=" '{print $2}') [ -z "$BINDIR" ] && BINDIR=$DIR start_service() { diff --git a/scripts/getdate.sh b/scripts/getdate.sh index 853dc22..4d28149 100644 --- a/scripts/getdate.sh +++ b/scripts/getdate.sh @@ -12,18 +12,18 @@ dir_avail(){ #导入订阅、配置文件相关 linkconfig(){ echo ----------------------------------------------- - echo 当前使用规则为:$(grep -aE '^5' $clashdir/configs/servers.list | sed -n ""$rule_link"p" | awk '{print $2}') - grep -aE '^5' $clashdir/configs/servers.list | awk '{print " "NR" "$2$4}' + echo 当前使用规则为:$(grep -aE '^5' $CRASHDIR/configs/servers.list | sed -n ""$rule_link"p" | awk '{print $2}') + grep -aE '^5' $CRASHDIR/configs/servers.list | awk '{print " "NR" "$2$4}' echo ----------------------------------------------- echo 0 返回上级菜单 read -p "请输入对应数字 > " num - totalnum=$(grep -acE '^5' $clashdir/configs/servers.list ) + totalnum=$(grep -acE '^5' $CRASHDIR/configs/servers.list ) if [ -z "$num" ] || [ "$num" -gt "$totalnum" ];then errornum elif [ "$num" = 0 ];then echo elif [ "$num" -le "$totalnum" ];then - #将对应标记值写入mark + #将对应标记值写入配置 rule_link=$num setconfig rule_link $rule_link echo ----------------------------------------------- @@ -34,18 +34,18 @@ linkserver(){ echo ----------------------------------------------- echo -e "\033[36m以下为互联网采集的第三方服务器,具体安全性请自行斟酌!\033[0m" echo -e "\033[32m感谢以下作者的无私奉献!!!\033[0m" - echo 当前使用后端为:$(grep -aE '^3|^4' $clashdir/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}') - grep -aE '^3|^4' $clashdir/configs/servers.list | awk '{print " "NR" "$3" "$2}' + echo 当前使用后端为:$(grep -aE '^3|^4' $CRASHDIR/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}') + grep -aE '^3|^4' $CRASHDIR/configs/servers.list | awk '{print " "NR" "$3" "$2}' echo ----------------------------------------------- echo 0 返回上级菜单 read -p "请输入对应数字 > " num - totalnum=$(grep -acE '^3|^4' $clashdir/configs/servers.list ) + totalnum=$(grep -acE '^3|^4' $CRASHDIR/configs/servers.list ) if [ -z "$num" ] || [ "$num" -gt "$totalnum" ];then errornum elif [ "$num" = 0 ];then echo elif [ "$num" -le "$totalnum" ];then - #将对应标记值写入mark + #将对应标记值写入配置 server_link=$num setconfig server_link $server_link echo ----------------------------------------------- @@ -93,10 +93,10 @@ linkfilter2(){ setconfig include \'$include\' } getyaml(){ - $clashdir/start.sh getyaml + $CRASHDIR/start.sh getyaml if [ "$?" = 0 ];then if [ "$inuserguide" != 1 ];then - read -p "是否启动clash服务以使配置文件生效?(1/0) > " res + read -p "是否启动服务以使配置文件生效?(1/0) > " res [ "$res" = 1 ] && clashstart || clashsh exit; fi @@ -142,7 +142,7 @@ getlink(){ elif [ "$link" = '1' ]; then if [ -n "$Url_link" ];then i=100 - #将用户链接写入mark + #将用户链接写入配置 setconfig Https setconfig Url \'$Url_link\' #获取在线yaml文件 @@ -197,7 +197,7 @@ getlink2(){ echo -e "\033[4;32m$link\033[0m" read -p "确认导入配置文件?原配置文件将被更名为config.yaml.bak![1/0] > " res if [ "$res" = '1' ]; then - #将用户链接写入mark + #将用户链接写入配置 sed -i '/Url=*/'d $CFG_PATH setconfig Https \'$link\' setconfig Url @@ -278,8 +278,10 @@ setrules(){ 0) ;; '') ;; *) - if [ $num -le $(cat $YAMLSDIR/rules.yaml | grep -Ev '^#' | grep -Ev '^ *$' | wc -l) ];then - sed -i "$num{/^\s*[^#]/d}" $YAMLSDIR/rules.yaml + text=$(cat $YAMLSDIR/rules.yaml | grep -Ev '^#' | sed -n "$num p") + if [ -n $text ];then + sed -i "/$text/d" $YAMLSDIR/rules.yaml + sleep 1 del_rule_type else errornum @@ -292,7 +294,7 @@ setrules(){ echo -e "\033[36m如需批量操作,请手动编辑:$YAMLSDIR/rules.yaml\033[0m" echo ----------------------------------------------- echo -e " 1 新增自定义规则" - echo -e " 2 管理自定义规则" + echo -e " 2 移除自定义规则" echo -e " 3 清空规则列表" echo -e " 4 配置节点绕过: \033[36m$proxies_bypass\033[0m" echo -e " 0 返回上级菜单" @@ -323,7 +325,7 @@ setrules(){ echo ----------------------------------------------- if [ "$proxies_bypass" = "未启用" ];then echo -e "\033[33m本功能会自动将当前配置文件中的节点域名或IP设置为直连规则以防止出现双重流量!\033[0m" - echo -e "\033[33m请确保下游设备使用的节点与ShellClash中使用的节点相同,否则无法生效!\033[0m" + echo -e "\033[33m请确保下游设备使用的节点与ShellCrash中使用的节点相同,否则无法生效!\033[0m" read -p "启用节点绕过?(1/0) > " res [ "$res" = "1" ] && proxies_bypass=已启用 else @@ -513,7 +515,7 @@ setproxies(){ echo ----------------------------------------------- if [ "$proxies_bypass" = "未启用" ];then echo -e "\033[33m本功能会自动将当前配置文件中的节点域名或IP设置为直连规则以防止出现双重流量!\033[0m" - echo -e "\033[33m请确保下游设备使用的节点与ShellClash中使用的节点相同,否则无法生效!\033[0m" + echo -e "\033[33m请确保下游设备使用的节点与ShellCrash中使用的节点相同,否则无法生效!\033[0m" read -p "启用节点绕过?(1/0) > " res [ "$res" = "1" ] && proxies_bypass=已启用 else @@ -548,10 +550,10 @@ override(){ source $CFG_PATH if [ -n "$(pidof clash)" ];then echo ----------------------------------------------- - echo -e "\033[33m检测到clash服务正在运行,需要先停止clash服务!\033[0m" - read -p "是否停止clash服务?(1/0) > " res + echo -e "\033[33m检测到服务正在运行,需要先停止服务!\033[0m" + read -p "是否停止服务?(1/0) > " res if [ "$res" = "1" ];then - $clashdir/start.sh stop + $CRASHDIR/start.sh stop setport fi else @@ -686,7 +688,7 @@ clashlink(){ if [ "$res" = '1' ]; then mv $YAMLSDIR/config.yaml.bak $YAMLSDIR/config.yaml echo ----------------------------------------------- - echo -e "\033[32m配置文件已还原!请手动重启clash服务!\033[0m" + echo -e "\033[32m配置文件已还原!请手动重启服务!\033[0m" sleep 1 else echo ----------------------------------------------- @@ -715,7 +717,8 @@ clashlink(){ fi ;; 5) - clashcron + source $CRASHDIR/task/task.sh && task_add + clashlink ;; 6) checkcfg=$(cat $CFG_PATH) @@ -731,23 +734,23 @@ clashlink(){ } #下载更新相关 gettar(){ - $clashdir/start.sh webget $TMPDIR/clashfm.tar.gz $tarurl + $CRASHDIR/start.sh webget $TMPDIR/clashfm.tar.gz $tarurl if [ "$?" != "0" ];then echo -e "\033[33m文件下载失败!\033[0m" error_down else - $clashdir/start.sh stop 2>/dev/null + $CRASHDIR/start.sh stop 2>/dev/null #解压 echo ----------------------------------------------- echo 开始解压文件! - mkdir -p $clashdir > /dev/null - tar -zxvf "$TMPDIR/clashfm.tar.gz" -C $clashdir/ + mkdir -p $CRASHDIR > /dev/null + tar -zxvf "$TMPDIR/clashfm.tar.gz" -C $CRASHDIR/ if [ $? -ne 0 ];then rm -rf $TMPDIR/clashfm.tar.gz echo -e "\033[33m文件解压失败!\033[0m" error_down else - source $clashdir/init.sh >/dev/null + source $CRASHDIR/init.sh >/dev/null echo -e "\033[32m脚本更新成功!\033[0m" fi fi @@ -757,7 +760,7 @@ getsh(){ echo ----------------------------------------------- echo -e "当前脚本版本为:\033[33m $versionsh_l \033[0m" echo -e "最新脚本版本为:\033[32m $release_new \033[0m" - echo -e "注意更新时会停止clash服务!" + echo -e "注意更新时会停止服务!" echo ----------------------------------------------- read -p "是否更新脚本?[1/0] > " res if [ "$res" = '1' ]; then @@ -812,13 +815,14 @@ getcore(){ #获取在线clash核心文件 echo ----------------------------------------------- echo 正在在线获取clash核心文件…… - $clashdir/start.sh webget $TMPDIR/clash.new $corelink + $CRASHDIR/start.sh webget $TMPDIR/clash.new $corelink if [ "$?" = "1" ];then echo -e "\033[31m核心文件下载失败!\033[0m" rm -rf $TMPDIR/clash.new [ -z "$custcorelink" ] && error_down else chmod +x $TMPDIR/clash.new + $CRASHDIR/start.sh stop clashv=$($TMPDIR/clash.new -v 2>/dev/null | sed 's/ linux.*//;s/.* //') if [ -z "$clashv" ];then echo -e "\033[31m核心文件下载成功但校验失败!请尝试手动指定CPU版本\033[0m" @@ -829,7 +833,6 @@ getcore(){ mv -f $TMPDIR/clash.new $bindir/clash chmod +x $bindir/clash setconfig clashcore $clashcore - setconfig clashv $version fi fi } @@ -838,7 +841,7 @@ setcustcore(){ echo ----------------------------------------------- echo -e "\033[36m自定义内核均未经过适配,可能存在部分功能不兼容的问题!\033[0m" echo -e "\033[36m如你不熟悉clash的运行机制,请使用脚本已经适配过的内核!\033[0m" - echo -e "\033[36m自定义内核不兼容小闪存模式,且下载可能依赖clash服务!\033[0m" + echo -e "\033[36m自定义内核不兼容小闪存模式,且下载可能依赖服务!\033[0m" echo -e "\033[33m继续后如出现任何问题,请务必自行解决,一切提问恕不受理!\033[0m" echo ----------------------------------------------- sleep 1 @@ -852,18 +855,18 @@ setcustcore(){ case "$num" in 1) clashcore=clashpre - custcorelink=https://github.com/juewuy/ShellClash/releases/download/clash.premium.latest/clash-linux-$cpucore + custcorelink=https://github.com/juewuy/ShellCrash/releases/download/clash.premium.latest/clash-linux-$cpucore getcore ;; 2) - clashcore=clash.meta - custcorelink=https://github.com/juewuy/ShellClash/releases/download/clash.meta.alpha/clash-linux-$cpucore + clashcore=meta + custcorelink=https://github.com/juewuy/ShellCrash/releases/download/clash.meta.alpha/clash-linux-$cpucore getcore ;; 3) read -p "请输入自定义内核的链接地址(必须是二进制文件) > " link [ -n "$link" ] && custcorelink="$link" - clashcore=clash.meta + clashcore=meta getcore ;; *) @@ -874,7 +877,7 @@ setcustcore(){ } setcore(){ #获取核心及版本信息 - [ ! -f $clashdir/clash ] && clashcore="未安装核心" + [ ! -f $CRASHDIR/clash ] && clashcore="未安装核心" ### echo ----------------------------------------------- [ -z "$cpucore" ] && getcpucore @@ -912,7 +915,7 @@ setcore(){ getcore ;; 3) - clashcore=clash.meta + clashcore=meta custcorelink='' getcore ;; @@ -932,7 +935,7 @@ setcore(){ getgeo(){ echo ----------------------------------------------- echo 正在从服务器获取数据库文件………… - $clashdir/start.sh webget $TMPDIR/$geoname $update_url/bin/geodata/$geotype + $CRASHDIR/start.sh webget $TMPDIR/$geoname $update_url/bin/geodata/$geotype if [ "$?" = "1" ];then echo ----------------------------------------------- echo -e "\033[31m文件下载失败!\033[0m" @@ -940,26 +943,29 @@ getgeo(){ else mv -f $TMPDIR/$geoname $bindir/$geoname echo ----------------------------------------------- - echo -e "\033[32mGeoIP/CN_IP数据库文件下载成功!\033[0m" - Geo_v=$GeoIP_v - setconfig Geo_v $GeoIP_v - if [ "$geoname" = "Country.mmdb" ];then - geotype=$geotype - setconfig geotype $geotype - fi + echo -e "\033[32m$geotype数据库文件下载成功!\033[0m" + #全球版GeoIP和精简版CN-IP数据库不共存 + [ "$geoname" = "Country.mmdb" ] && { + setconfig Country_v + setconfig cn_mini_v + } + geo_v="$(echo $geotype | awk -F "." '{print $1}')_v" + setconfig $geo_v $GeoIP_v fi + sleep 1 } setgeo(){ + [ -n "$cn_mini.mmdb_v" ] && geo_type_des=精简版 || geo_type_des=全球版 echo ----------------------------------------------- - [ "$geotype" = "cn_mini.mmdb" ] && echo -e "当前使用的是\033[47;30m精简版数据库\033[0m" || echo -e "当前使用的是\033[47;30m全球版数据库\033[0m" - echo -e "\033[36m请选择需要更新/切换的GeoIP/CN_IP数据库:\033[0m" + echo -e "\033[36m请选择需要更新的GeoIP/CN_IP数据库:\033[0m" + echo -e "\033[36m全球版GeoIP和精简版CN-IP数据库不共存\033[0m" + echo -e "在线数据库最新版本:\033[32m$GeoIP_v\033[0m" echo ----------------------------------------------- - echo -e " 1 由\033[32malecthw\033[0m提供的全球版GeoIP数据库(约6mb)" - echo -e " 2 由\033[32mHackl0us\033[0m提供的精简版CN-IP数据库(约0.2mb)" - echo -e " 3 由\033[32m17mon\033[0m提供的CN-IP文件(需启用CN_IP绕过,约0.2mb)" - echo -e " 4 由\033[32mChanthMiao\033[0m提供的CN-IPV6文件(需ipv6启用CN_IP绕过,约50kb)" - [ "$clashcore" = "clash.meta" ] && \ - echo -e " 5 由\033[32mLoyalsoldier\033[0m提供的GeoSite数据库(限Meta内核,约4.5mb)" + echo -e " 1 全球版GeoIP数据库(约6mb) \033[33m$Country_v\033[0m" + echo -e " 2 精简版CN-IP数据库(约0.2mb) \033[33m$cn_mini_v\033[0m" + echo -e " 3 CN-IP绕过文件(约0.2mb) \033[33m$china_ip_list_v\033[0m" + echo -e " 4 CN-IPV6绕过文件(约50kb) \033[33m$china_ipv6_list_v\033[0m" + echo -e " 5 GeoSite数据库(约4.5mb) \033[33m$geosite_v\033[0m" echo " 0 返回上级菜单" echo ----------------------------------------------- read -p "请输入对应数字 > " num @@ -967,10 +973,12 @@ setgeo(){ geotype=Country.mmdb geoname=Country.mmdb getgeo + setgeo elif [ "$num" = '2' ]; then geotype=cn_mini.mmdb geoname=Country.mmdb getgeo + setgeo elif [ "$num" = '3' ]; then if [ "$cn_ip_route" = "已开启" ]; then geotype=china_ip_list.txt @@ -981,6 +989,7 @@ setgeo(){ echo -e "\033[31m未开启绕过内核功能,无需更新CN-IP文件!!\033[0m" sleep 1 fi + setgeo elif [ "$num" = '4' ]; then if [ "$cn_ipv6_route" = "已开启" -a "$ipv6_redir" = "已开启" ]; then geotype=china_ipv6_list.txt @@ -991,10 +1000,18 @@ setgeo(){ echo -e "\033[31m未开启ipv6下CN绕过功能,无需更新CN-IPV6文件!!\033[0m" sleep 1 fi + setgeo elif [ "$num" = '5' ]; then - geotype=geosite.dat - geoname=GeoSite.dat - getgeo + if [ "$clashcore" = "meta" ]; then + geotype=geosite.dat + geoname=GeoSite.dat + getgeo + else + echo ----------------------------------------------- + echo -e "\033[31m当前未使用meta内核,无需更新GeoSite数据库!!\033[0m" + sleep 1 + fi + setgeo else update fi @@ -1002,21 +1019,21 @@ setgeo(){ getdb(){ #下载及安装 - if [ -f /www/clash/index.html -o -f $clashdir/ui/index.html ];then + if [ -f /www/clash/index.html -o -f $CRASHDIR/ui/index.html ];then echo ----------------------------------------------- echo -e "\033[31m检测到您已经安装过本地面板了!\033[0m" echo ----------------------------------------------- read -p "是否覆盖安装?[1/0] > " res if [ "$res" = 1 ]; then rm -rf /www/clash - rm -rf $clashdir/ui + rm -rf $CRASHDIR/ui rm -rf $bindir/ui fi fi dblink="${update_url}/bin/dashboard/${db_type}.tar.gz" echo ----------------------------------------------- echo 正在连接服务器获取安装文件………… - $clashdir/start.sh webget $TMPDIR/clashdb.tar.gz $dblink + $CRASHDIR/start.sh webget $TMPDIR/clashdb.tar.gz $dblink if [ "$?" = "1" ];then echo ----------------------------------------------- echo -e "\033[31m文件下载失败!\033[0m" @@ -1053,14 +1070,14 @@ setdb(){ echo ----------------------------------------------- echo -e "请选择面板\033[33m安装目录:\033[0m" echo ----------------------------------------------- - echo -e " 1 在$clashdir/ui目录安装" + echo -e " 1 在$CRASHDIR/ui目录安装" echo -e " 2 在/www/clash目录安装" echo ----------------------------------------------- echo " 0 返回上级菜单" read -p "请输入对应数字 > " num if [ "$num" = '1' ]; then - dbdir=$clashdir/ui + dbdir=$CRASHDIR/ui hostdir=":$db_port/ui" elif [ "$num" = '2' ]; then dbdir=/www/clash @@ -1069,7 +1086,7 @@ setdb(){ setdb fi else - dbdir=$clashdir/ui + dbdir=$CRASHDIR/ui hostdir=":$db_port/ui" fi } @@ -1113,7 +1130,7 @@ setdb(){ read -p "确认卸载本地面板?(1/0) > " res if [ "$res" = 1 ];then rm -rf /www/clash - rm -rf $clashdir/ui + rm -rf $CRASHDIR/ui rm -rf $bindir/ui echo ----------------------------------------------- echo -e "\033[31m面板已经卸载!\033[0m" @@ -1128,7 +1145,7 @@ getcrt(){ crtlink="${update_url}/bin/fix/ca-certificates.crt" echo ----------------------------------------------- echo 正在连接服务器获取安装文件………… - $clashdir/start.sh webget $TMPDIR/ca-certificates.crt $crtlink + $CRASHDIR/start.sh webget $TMPDIR/ca-certificates.crt $crtlink if [ "$?" = "1" ];then echo ----------------------------------------------- echo -e "\033[31m文件下载失败!\033[0m" @@ -1137,7 +1154,7 @@ getcrt(){ echo ----------------------------------------------- mkdir -p $openssldir mv -f $TMPDIR/ca-certificates.crt $crtdir - $clashdir/start.sh webget $TMPDIR/ssl_test https://baidu.com echooff rediron skipceroff + $CRASHDIR/start.sh webget $TMPDIR/ssl_test https://baidu.com echooff rediron skipceroff if [ "$?" = "1" ];then export CURL_CA_BUNDLE=$crtdir echo "export CURL_CA_BUNDLE=$crtdir" >> /etc/profile @@ -1178,7 +1195,7 @@ setcrt(){ #安装源 setserver(){ saveserver(){ - #写入mark文件 + #写入配置文件 setconfig update_url \'$update_url\' setconfig release_url \'$release_url\' echo ----------------------------------------------- @@ -1186,10 +1203,10 @@ setserver(){ release_new="" } echo ----------------------------------------------- - echo -e "\033[30;47m切换ShellClash版本及更新源地址\033[0m" + echo -e "\033[30;47m切换ShellCrash版本及更新源地址\033[0m" echo -e "当前源地址:\033[4;32m$update_url\033[0m" echo ----------------------------------------------- - grep -aE '^1|^2' $clashdir/configs/servers.list | awk '{print " "NR" "$4" "$2}' + grep -aE '^1|^2' $CRASHDIR/configs/servers.list | awk '{print " "NR" "$4" "$2}' echo ----------------------------------------------- echo -e " a 自定义源地址(用于本地源或自建源)" echo -e " b \033[31m版本回退\033[0m" @@ -1197,11 +1214,11 @@ setserver(){ read -p "请输入对应数字 > " num case $num in [0-99]) - release_type=$(grep -aE '^1|^2' $clashdir/configs/servers.list | sed -n ""$num"p" | awk '{print $4}') + release_type=$(grep -aE '^1|^2' $CRASHDIR/configs/servers.list | sed -n ""$num"p" | awk '{print $4}') if [ "release_type" = "稳定版" ];then - release_url=$(grep -aE '^1' $clashdir/configs/servers.list | sed -n ""$num"p" | awk '{print $3}') + release_url=$(grep -aE '^1' $CRASHDIR/configs/servers.list | sed -n ""$num"p" | awk '{print $3}') else - update_url=$(grep -aE '^1|^2' $clashdir/configs/servers.list | sed -n ""$num"p" | awk '{print $3}') + update_url=$(grep -aE '^1|^2' $CRASHDIR/configs/servers.list | sed -n ""$num"p" | awk '{print $3}') unset release_url fi saveserver @@ -1219,8 +1236,8 @@ setserver(){ ;; b) echo ----------------------------------------------- - echo -e "\033[33m如无法连接,请务必先启用clash服务!!!\033[0m" - $clashdir/start.sh webget $TMPDIR/clashrelease https://raw.githubusercontent.com/juewuy/ShellClash/master/bin/release_version echooff rediroff 2>$TMPDIR/clashrelease + echo -e "\033[33m如无法连接,请务必先启用服务!!!\033[0m" + $CRASHDIR/start.sh webget $TMPDIR/clashrelease https://raw.githubusercontent.com/juewuy/ShellCrash/master/bin/release_version echooff rediroff 2>$TMPDIR/clashrelease echo -e "\033[31m请选择想要回退至的release版本:\033[0m" cat $TMPDIR/clashrelease | awk '{print " "NR" "$1}' echo -e " 0 返回上级菜单" @@ -1229,7 +1246,7 @@ setserver(){ setserver elif [ $num -le $(cat $TMPDIR/clashrelease 2>/dev/null | awk 'END{print NR}') ]; then release_version=$(cat $TMPDIR/clashrelease | awk '{print $1}' | sed -n "$num"p) - update_url="https://raw.githubusercontent.com/juewuy/ShellClash/$release_version" + update_url="https://raw.githubusercontent.com/juewuy/ShellCrash/$release_version" saveserver unset release_url else @@ -1248,7 +1265,7 @@ checkupdate(){ if [ -z "$release_new" ];then if [ -n "$release_url" ];then [ -n "$(echo $release_url|grep 'jsdelivr')" ] && check_url=$release_url@master || check_url=$release_url/master - $clashdir/start.sh webget $TMPDIR/clashversion $check_url/bin/release_version echoon rediroff 2>$TMPDIR/clashversion + $CRASHDIR/start.sh webget $TMPDIR/clashversion $check_url/bin/release_version echoon rediroff 2>$TMPDIR/clashversion release_new=$(cat $TMPDIR/clashversion | head -1) [ -n "$(echo $release_url|grep 'jsdelivr')" ] && update_url=$release_url@$release_new || update_url=$release_url/$release_new setconfig update_url \'$update_url\' @@ -1256,13 +1273,13 @@ if [ -z "$release_new" ];then else release_type=测试版 fi - $clashdir/start.sh webget $TMPDIR/clashversion $update_url/bin/version echooff + $CRASHDIR/start.sh webget $TMPDIR/clashversion $update_url/bin/version echooff [ "$?" = "0" ] && release_new=$(cat $TMPDIR/clashversion | grep -oE 'versionsh=.*' | awk -F'=' '{ print $2 }') if [ -n "$release_new" ];then source $TMPDIR/clashversion 2>/dev/null else echo -e "\033[31m检查更新失败!请切换其他安装源!\033[0m" - echo -e "\033[36m如全部安装源都无法使用,请先运行clash服务后再使用更新功能!\033[0m" + echo -e "\033[36m如全部安装源都无法使用,请先运行服务后再使用更新功能!\033[0m" sleep 1 setserver fi @@ -1273,30 +1290,27 @@ update(){ echo ----------------------------------------------- echo -ne "\033[32m正在检查更新!\033[0m\r" checkupdate - [ "$clashcore" = "clash" ] && clash_n=$clash_v || clash_n=$clashpre_v - [ "$clashcore" = "clashpre" ] && clash_n=$clashpre_v - [ "$clashcore" = "clash.net" ] && clash_n=$clashnet_v - [ "$clashcore" = "clash.meta" ] && clash_n=$meta_v clash_v=$($bindir/clash -v 2>/dev/null | head -n 1 | sed 's/ linux.*//;s/.* //') [ -z "$clash_v" ] && clash_v=$clashv + clash_v_new=$(eval echo \$${clashcore}_v) echo -e "\033[30;47m欢迎使用更新功能:\033[0m" echo ----------------------------------------------- - echo -e "当前目录(\033[32m$clashdir\033[0m)剩余空间:\033[36m$(dir_avail $clashdir -h)\033[0m" - [ "$(dir_avail $clashdir)" -le 5120 ] && { + echo -e "当前目录(\033[32m$CRASHDIR\033[0m)剩余空间:\033[36m$(dir_avail $CRASHDIR -h)\033[0m" + [ "$(dir_avail $CRASHDIR)" -le 5120 ] && { echo -e "\033[33m当前目录剩余空间较低,建议开启小闪存模式!\033[0m" sleep 1 } echo ----------------------------------------------- echo -e " 1 更新\033[36m管理脚本 \033[33m$versionsh_l\033[0m > \033[32m$versionsh$release_type\033[0m" - echo -e " 2 切换\033[33mclash核心 \033[33m$clash_v\033[0m > \033[32m$clash_n\033[0m" - echo -e " 3 更新\033[32mGeoIP/CN-IP \033[33m$Geo_v\033[0m > \033[32m$GeoIP_v\033[0m" + echo -e " 2 切换\033[33mclash核心 \033[33m$clash_v\033[0m > \033[32m$clash_v_new\033[0m" + echo -e " 3 更新\033[32m数据库文件\033[0m" echo -e " 4 安装本地\033[35mDashboard\033[0m面板" echo -e " 5 安装/更新本地\033[33m根证书文件\033[0m" echo -e " 6 查看\033[32mPAC\033[0m自动代理配置" echo ----------------------------------------------- echo -e " 7 切换\033[36m安装源\033[0m及\033[36m安装版本\033[0m" - echo -e " 8 \033[32m重新初始化运行环境\033[0m" - echo -e " 9 \033[31m卸载\033[34mShellClash\033[0m" + echo -e " 8 \033[32m配置自动更新\033[0m" + echo -e " 9 \033[31m卸载ShellCrash\033[0m" echo ----------------------------------------------- echo -e "99 \033[36m鸣谢!\033[0m" echo -e " 0 返回上级菜单" @@ -1336,7 +1350,7 @@ update(){ setserver update elif [ "$num" = 8 ]; then - source $clashdir/init.sh + source $CRASHDIR/task/task.sh && task_add update elif [ "$num" = 9 ]; then @@ -1367,7 +1381,7 @@ userguide(){ forwhat(){ echo ----------------------------------------------- - echo -e "\033[30;46m 欢迎使用ShellClash新手引导! \033[0m" + echo -e "\033[30;46m 欢迎使用ShellCrash新手引导! \033[0m" echo ----------------------------------------------- echo -e "\033[33m请先选择你的使用环境: \033[0m" echo -e "\033[0m(你之后依然可以在设置中更改各种配置)\033[0m" @@ -1395,7 +1409,7 @@ userguide(){ #设置开机启动 [ -f /etc/rc.common ] && /etc/init.d/clash enable ckcmd systemctl && systemctl enable clash.service > /dev/null 2>&1 - rm -rf $clashdir/.dis_startup + rm -rf $CRASHDIR/.dis_startup autostart=enable #检测IP转发 if [ "$(cat /proc/sys/net/ipv4/ip_forward)" = "0" ];then @@ -1423,7 +1437,7 @@ userguide(){ } forwhat #检测小内存模式 - dir_size=$(df $clashdir | awk '{print $4}' | sed 1d) + dir_size=$(df $CRASHDIR | awk '{print $4}' | sed 1d) if [ "$dir_size" -lt 10240 ];then echo ----------------------------------------------- echo -e "\033[33m检测到你的安装目录空间不足10M,是否开启小闪存模式?\033[0m" @@ -1448,7 +1462,7 @@ userguide(){ [ "$res" = 1 ] && checkupdate && getcrt fi #设置加密DNS - $clashdir/start.sh webget $TMPDIR/ssl_test https://doh.pub echooff rediron + $CRASHDIR/start.sh webget $TMPDIR/ssl_test https://doh.pub echooff rediron if [ "$?" = "0" ];then dns_nameserver='https://223.5.5.5/dns-query, https://doh.pub/dns-query, tls://dns.rubyfish.cn:853' dns_fallback='https://1.0.0.1/dns-query, https://8.8.4.4/dns-query, https://doh.opendns.com/dns-query' @@ -1489,6 +1503,8 @@ userguide(){ setconfig authentication \'$authentication\' fi fi + #启用推荐的自动任务配置 + source $CRASHDIR/task/task.sh && task_recom #小米设备软固化 if [ "$systype" = "mi_snapshot" ];then echo ----------------------------------------------- @@ -1499,7 +1515,7 @@ userguide(){ #提示导入订阅或者配置文件 echo ----------------------------------------------- echo -e "\033[32m是否导入配置文件?\033[0m(这是运行前的最后一步)" - echo -e "\033[0m你必须拥有一份yaml格式的配置文件才能运行clash服务!\033[0m" + echo -e "\033[0m你必须拥有一份yaml格式的配置文件才能运行服务!\033[0m" echo ----------------------------------------------- read -p "现在开始导入?(1/0) > " res [ "$res" = 1 ] && inuserguide=1 && clashlink && inuserguide="" @@ -1507,7 +1523,7 @@ userguide(){ echo ----------------------------------------------- echo -e "\033[36m很好!现在只需要执行启动就可以愉快的使用了!\033[0m" echo ----------------------------------------------- - read -p "立即启动clash服务?(1/0) > " res + read -p "立即启动服务?(1/0) > " res [ "$res" = 1 ] && clashstart && sleep 2 clashsh } @@ -1517,7 +1533,7 @@ testcommand(){ echo -e "\033[30;47m这里是测试命令菜单\033[0m" echo -e "\033[33m如遇问题尽量运行相应命令后截图提交issue或TG讨论组\033[0m" echo ----------------------------------------------- - echo " 1 查看Clash运行时的报错信息(会停止clash服务)" + echo " 1 查看Clash运行时的报错信息(会停止服务)" echo " 2 查看系统DNS端口(:53)占用 " echo " 3 测试ssl加密(aes-128-gcm)跑分" echo " 4 查看clash相关路由规则" @@ -1532,11 +1548,11 @@ testcommand(){ elif [ "$num" = 0 ]; then clashsh elif [ "$num" = 1 ]; then - $clashdir/start.sh stop + $CRASHDIR/start.sh stop echo ----------------------------------------------- - if $clashdir/clash -v &>/dev/null;then + if $CRASHDIR/clash -v &>/dev/null;then clash -s modify_yaml &>/dev/null - $clashdir/clash -t -d $clashdir -f $TMPDIR/config.yaml + $CRASHDIR/clash -t -d $CRASHDIR -f $TMPDIR/config.yaml [ "$?" = 0 ] && testover=32m测试通过!|| testover=31m出现错误!请截图后到TG群询问!!! echo -e "\033[$testover\033[0m" else @@ -1592,7 +1608,7 @@ testcommand(){ exit; elif [ "$num" = 5 ]; then echo ----------------------------------------------- - sed -n '1,40p' $clashdir/config.yaml + sed -n '1,40p' $CRASHDIR/config.yaml echo ----------------------------------------------- exit; elif [ "$num" = 6 ]; then @@ -1611,4 +1627,10 @@ testcommand(){ errornum clashsh fi -} \ No newline at end of file +} + +case "$1" in + *) + $1 + ;; +esac \ No newline at end of file diff --git a/scripts/init.sh b/scripts/init.sh index c9bfa4f..2c049c6 100644 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -1,7 +1,7 @@ #!/bin/sh # Copyright (C) Juewuy -version=1.8.1 +version=1.8.2d setdir(){ dir_avail(){ @@ -76,7 +76,7 @@ if [ -n "$systype" ];then } [ "$systype" = "ng_snapshot" ] && dir=/tmp/mnt else - echo -e "\033[33m安装ShellClash至少需要预留约1MB的磁盘空间\033[0m" + echo -e "\033[33m安装ShellCrash至少需要预留约1MB的磁盘空间\033[0m" echo -e " 1 在\033[32m/etc目录\033[0m下安装(适合root用户)" echo -e " 2 在\033[32m/usr/share目录\033[0m下安装(适合Linux系统)" echo -e " 3 在\033[32m当前用户目录\033[0m下安装(适合非root用户)" @@ -119,16 +119,16 @@ if [ ! -w $dir ];then else echo -e "目标目录\033[32m$dir\033[0m空间剩余:$(dir_avail $dir -h)" read -p "确认安装?(1/0) > " res - [ "$res" = "1" ] && clashdir=$dir/clash || setdir + [ "$res" = "1" ] && CRASHDIR=$dir/clash || setdir fi } setconfig(){ #参数1代表变量名,参数2代表变量值,参数3即文件路径 - [ -z "$3" ] && configpath=$clashdir/configs/ShellClash.cfg || configpath=$3 + [ -z "$3" ] && configpath=$CRASHDIR/configs/ShellCrash.cfg || configpath=$3 [ -n "$(grep -E "^${1}=" $configpath)" ] && sed -i "s#^${1}=\(.*\)#${1}=${2}#g" $configpath || echo "${1}=${2}" >> $configpath } -$clashdir/start.sh stop 2>/dev/null #防止进程冲突 +$CRASHDIR/start.sh stop 2>/dev/null #防止进程冲突 #特殊固件识别及标记 [ -f "/etc/storage/started_script.sh" ] && { systype=Padavan #老毛子固件 @@ -143,30 +143,30 @@ $clashdir/start.sh stop 2>/dev/null #防止进程冲突 [ -w "/var/mnt/cfg/firewall" ] && systype=ng_snapshot #NETGEAR设备 #检查环境变量 -[ -z "$clashdir" -a -d /tmp/SC_tmp ] && { +[ -z "$CRASHDIR" -a -d /tmp/SC_tmp ] && { setdir } #移动文件 -mkdir -p $clashdir -mv -f /tmp/SC_tmp/* $clashdir 2>/dev/null +mkdir -p $CRASHDIR +mv -f /tmp/SC_tmp/* $CRASHDIR 2>/dev/null #初始化 -mkdir -p $clashdir/configs -[ -f "$clashdir/configs/ShellClash.cfg" ] || echo '#ShellClash配置文件,不明勿动!' > $clashdir/configs/ShellClash.cfg +mkdir -p $CRASHDIR/configs +[ -f "$CRASHDIR/configs/ShellCrash.cfg" ] || echo '#ShellCrash配置文件,不明勿动!' > $CRASHDIR/configs/ShellCrash.cfg #本地安装跳过新手引导 #[ -z "$url" ] && setconfig userguide 1 #判断系统类型写入不同的启动文件 if [ -f /etc/rc.common ];then #设为init.d方式启动 - cp -f $clashdir/clashservice /etc/init.d/clash + cp -f $CRASHDIR/clashservice /etc/init.d/clash chmod 755 /etc/init.d/clash else [ -w /etc/systemd/system ] && sysdir=/etc/systemd/system [ -w /usr/lib/systemd/system ] && sysdir=/usr/lib/systemd/system if [ -n "$sysdir" -a -z "$WSL_DISTRO_NAME" ];then #wsl环境不使用systemd #设为systemd方式启动 - mv -f $clashdir/clash.service $sysdir/clash.service 2>/dev/null - sed -i "s%/etc/clash%$clashdir%g" $sysdir/clash.service + mv -f $CRASHDIR/clash.service $sysdir/clash.service 2>/dev/null + sed -i "s%/etc/clash%$CRASHDIR%g" $sysdir/clash.service systemctl daemon-reload else #设为保守模式启动 @@ -175,8 +175,9 @@ else fi #修饰文件及版本号 type bash &>/dev/null && shtype=bash || shtype=sh -sed -i "s|/bin/sh|/bin/$shtype|" $clashdir/start.sh -chmod 755 $clashdir/start.sh +sed -i "s|/bin/sh|/bin/$shtype|" $CRASHDIR/start.sh +chmod 755 $CRASHDIR/start.sh +chmod 755 $CRASHDIR/task.sh setconfig versionsh_l $version #设置更新地址 [ -n "$url" ] && setconfig update_url $url @@ -186,15 +187,15 @@ setconfig versionsh_l $version [ -w ~/.bashrc ] && profile=~/.bashrc [ -w /etc/profile ] && profile=/etc/profile if [ -n "$profile" ];then - sed -i '/alias clash=*/'d $profile - echo "alias clash=\"$shtype $clashdir/clash.sh\"" >> $profile #设置快捷命令环境变量 - sed -i '/export clashdir=*/'d $profile - echo "export clashdir=\"$clashdir\"" >> $profile #设置clash路径环境变量 + sed -i '/alias crash=*/'d $profile + echo "alias crash=\"$shtype $CRASHDIR/clash.sh\"" >> $profile #设置快捷命令环境变量 + sed -i '/export CRASHDIR=*/'d $profile + echo "export CRASHDIR=\"$CRASHDIR\"" >> $profile #设置clash路径环境变量 source $profile &>/dev/null || echo 运行错误!请使用bash而不是dash运行安装命令!!! #适配zsh环境变量 - [ -n "$(ls -l /bin/sh|grep -oE 'zsh')" ] && [ -z "$(cat ~/.zshrc 2>/dev/null|grep clashdir)" ] && { - echo "alias clash=\"$shtype $clashdir/clash.sh\"" >> ~/.zshrc - echo "export clashdir=\"$clashdir\"" >> ~/.zshrc + [ -n "$(ls -l /bin/sh|grep -oE 'zsh')" ] && [ -z "$(cat ~/.zshrc 2>/dev/null|grep CRASHDIR)" ] && { + echo "alias clash=\"$shtype $CRASHDIR/clash.sh\"" >> ~/.zshrc + echo "export CRASHDIR=\"$CRASHDIR\"" >> ~/.zshrc source ~/.zshrc &>/dev/null } else @@ -203,49 +204,59 @@ else fi #梅林/Padavan额外设置 [ -n "$initdir" ] && { - sed -i '/ShellClash初始化/'d $initdir + sed -i '/ShellCrash初始化/'d $initdir touch $initdir - echo "$clashdir/start.sh init #ShellClash初始化脚本" >> $initdir + echo "$CRASHDIR/start.sh init #ShellCrash初始化脚本" >> $initdir chmod a+rx $initdir 2>/dev/null setconfig initdir $initdir } #镜像化OpenWrt(snapshot)额外设置 if [ "$systype" = "mi_snapshot" -o "$systype" = "ng_snapshot" ];then - chmod 755 $clashdir/misnap_init.sh - uci set firewall.ShellClash=include - uci set firewall.ShellClash.type='script' - uci set firewall.ShellClash.path="$clashdir/misnap_init.sh" - uci set firewall.ShellClash.enabled='1' + chmod 755 $CRASHDIR/misnap_init.sh + uci set firewall.ShellCrash=include + uci set firewall.ShellCrash.type='script' + uci set firewall.ShellCrash.path="$CRASHDIR/misnap_init.sh" + uci set firewall.ShellCrash.enabled='1' uci commit firewall setconfig systype $systype else - rm -rf $clashdir/misnap_init.sh + rm -rf $CRASHDIR/misnap_init.sh fi #华硕USB启动额外设置 [ "$usb_status" = "1" ] && { - echo "$clashdir/start.sh init #ShellClash初始化脚本" > $clashdir/asus_usb_mount.sh - nvram set script_usbmount="$clashdir/asus_usb_mount.sh" + echo "$CRASHDIR/start.sh init #ShellCrash初始化脚本" > $CRASHDIR/asus_usb_mount.sh + nvram set script_usbmount="$CRASHDIR/asus_usb_mount.sh" nvram commit } #删除临时文件 rm -rf /tmp/*lash*gz rm -rf /tmp/SC_tmp #转换&清理旧版本文件 -mkdir -p $clashdir/yamls -mkdir -p $clashdir/tools +mkdir -p $CRASHDIR/yamls +mkdir -p $CRASHDIR/tools +mkdir -p $CRASHDIR/task for file in config.yaml.bak user.yaml proxies.yaml proxy-groups.yaml rules.yaml others.yaml ;do - mv -f $clashdir/$file $clashdir/yamls/$file 2>/dev/null + mv -f $CRASHDIR/$file $CRASHDIR/yamls/$file 2>/dev/null done - [ ! -L $clashdir/config.yaml ] && mv -f $clashdir/config.yaml $clashdir/yamls/config.yaml 2>/dev/null + [ ! -L $CRASHDIR/config.yaml ] && mv -f $CRASHDIR/config.yaml $CRASHDIR/yamls/config.yaml 2>/dev/null for file in fake_ip_filter mac web_save servers.list fake_ip_filter.list fallback_filter.list;do - mv -f $clashdir/$file $clashdir/configs/$file 2>/dev/null + mv -f $CRASHDIR/$file $CRASHDIR/configs/$file 2>/dev/null done - mv -f $clashdir/mark $clashdir/configs/ShellClash.cfg 2>/dev/null -for file in cron dropbear_rsa_host_key authorized_keys tun.ko ShellDDNS.sh;do - mv -f $clashdir/$file $clashdir/tools/$file 2>/dev/null + #配置文件改名 + mv -f $CRASHDIR/mark $CRASHDIR/configs/ShellCrash.cfg 2>/dev/null + mv -f $CRASHDIR/configs/ShellClash.cfg $CRASHDIR/configs/ShellCrash.cfg 2>/dev/null +for file in dropbear_rsa_host_key authorized_keys tun.ko ShellDDNS.sh;do + mv -f $CRASHDIR/$file $CRASHDIR/tools/$file 2>/dev/null +done +for file in cron task.sh task.list;do + mv -f $CRASHDIR/$file $CRASHDIR/task/$file 2>/dev/null done for file in log clash.service mark? mark.bak;do - rm -rf $clashdir/$file + rm -rf $CRASHDIR/$file done +#旧版任务清理 +$CRASHDIR/start.sh cronset "clash服务" +$CRASHDIR/start.sh cronset "订阅链接" +$CRASHDIR/start.sh cronset "ShellCrash初始化" sleep 1 -echo -e "\033[32m脚本初始化完成,请输入\033[30;47m clash \033[0;33m命令开始使用!\033[0m" +echo -e "\033[32m脚本初始化完成,请输入\033[30;47m crash \033[0;33m命令开始使用!\033[0m" diff --git a/scripts/misnap_init.sh b/scripts/misnap_init.sh index ed5d165..e324686 100644 --- a/scripts/misnap_init.sh +++ b/scripts/misnap_init.sh @@ -1,7 +1,7 @@ #!/bin/sh # Copyright (C) Juewuy -clashdir="$(uci get firewall.ShellClash.path | sed 's/\/misnap_init.sh//')" +CRASHDIR="$(uci get firewall.ShellClash.path | sed 's/\/misnap_init.sh//')" profile=/etc/profile autoSSH(){ @@ -13,7 +13,7 @@ autoSSH(){ [ -z "$(pidof dropbear)" -o -z "$(netstat -ntul | grep :22)" ] && { sed -i 's/channel=.*/channel="debug"/g' /etc/init.d/dropbear /etc/init.d/dropbear restart - mi_autoSSH_pwd=$(grep 'mi_autoSSH_pwd=' $clashdir/mark | awk -F "=" '{print $2}') + mi_autoSSH_pwd=$(grep 'mi_autoSSH_pwd=' $CRASHDIR/configs/ShellCrash.cfg | awk -F "=" '{print $2}') [ -n "$mi_autoSSH_pwd" ] && echo -e "$mi_autoSSH_pwd\n$mi_autoSSH_pwd" | passwd root } #配置nvram @@ -21,8 +21,8 @@ autoSSH(){ [ "$(nvram get telnet_en)" = 0 ] && nvram set telnet_en=1 nvram commit &> /dev/null #备份还原SSH秘钥 - [ -f $clashdir/configs/dropbear_rsa_host_key ] && ln -sf $clashdir/configs/dropbear_rsa_host_key /etc/dropbear/dropbear_rsa_host_key - [ -f $clashdir/configs/authorized_keys ] && ln -sf $clashdir/configs/authorized_keys /etc/dropbear/authorized_keys + [ -f $CRASHDIR/configs/dropbear_rsa_host_key ] && ln -sf $CRASHDIR/configs/dropbear_rsa_host_key /etc/dropbear/dropbear_rsa_host_key + [ -f $CRASHDIR/configs/authorized_keys ] && ln -sf $CRASHDIR/configs/authorized_keys /etc/dropbear/authorized_keys #自动清理升级备份文件夹 rm -rf /data/etc_bak } @@ -34,7 +34,7 @@ tunfix(){ mkdir -p /tmp/overlay/work mount -o noatime,lowerdir=${ko_dir},upperdir=/tmp/overlay/upper,workdir=/tmp/overlay/work -t overlay "overlay_mods_only" ${ko_dir} #将tun.ko链接到lib - ln -sf $clashdir/tools/tun.ko ${ko_dir}/tun.ko + ln -sf $CRASHDIR/tools/tun.ko ${ko_dir}/tun.ko } tproxyfix(){ sed -i 's/sysctl -w net.bridge.bridge-nf-call-ip/#sysctl -w net.bridge.bridge-nf-call-ip/g' /etc/init.d/qca-nss-ecm @@ -51,20 +51,20 @@ init(){ done #初始化环境变量 sed -i "/alias clash/d" $profile - sed -i "/export clashdir/d" $profile - echo "alias clash=\"$clashdir/clash.sh\"" >>$profile - echo "export clashdir=\"$clashdir\"" >>$profile + sed -i "/export CRASHDIR/d" $profile + echo "alias clash=\"$CRASHDIR/clash.sh\"" >>$profile + echo "export CRASHDIR=\"$CRASHDIR\"" >>$profile #软固化功能 autoSSH #设置init.d服务 - cp -f $clashdir/clashservice /etc/init.d/clash + cp -f $CRASHDIR/clashservice /etc/init.d/clash chmod 755 /etc/init.d/clash #启动服务 - if [ ! -f $clashdir/.dis_startup ]; then + if [ ! -f $CRASHDIR/.dis_startup ]; then #AX6S/AX6000修复tun功能 - [ -f $clashdir/configs/tun.ko ] && tunfix + [ -f $CRASHDIR/configs/tun.ko ] && tunfix #小米7000/小米万兆修复tproxy - [ -f /etc/init.d/qca-nss-ecm ] && [ -n "$(grep 'redir_mod=Tproxy' $clashdir/configs/ShellClash.cfg )" ] && tproxyfix + [ -f /etc/init.d/qca-nss-ecm ] && [ -n "$(grep 'redir_mod=Tproxy' $CRASHDIR/configs/ShellClash.cfg )" ] && tproxyfix #启动服务 /etc/init.d/clash start /etc/init.d/clash enable diff --git a/scripts/start.sh b/scripts/start.sh index a2d1827..8472a1a 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -2,18 +2,18 @@ # Copyright (C) Juewuy #初始化目录 -[ -d "/etc/storage/clash" ] && clashdir=/etc/storage/clash -[ -d "/jffs/clash" ] && clashdir=/jffs/clash -[ -z "$clashdir" ] && clashdir=$(cat /etc/profile | grep clashdir | awk -F "\"" '{print $2}') -[ -z "$clashdir" ] && clashdir=$(cat ~/.bashrc | grep clashdir | awk -F "\"" '{print $2}') -CFG_PATH=$clashdir/configs/ShellClash.cfg -TMPDIR=/tmp/ShellClash && [ ! -f $TMPDIR ] && mkdir -p $TMPDIR +[ -d "/etc/storage/clash" ] && CRASHDIR=/etc/storage/clash +[ -d "/jffs/clash" ] && CRASHDIR=/jffs/clash +[ -z "$CRASHDIR" ] && CRASHDIR=$(cat /etc/profile | grep CRASHDIR | awk -F "\"" '{print $2}') +[ -z "$CRASHDIR" ] && CRASHDIR=$(cat ~/.bashrc | grep CRASHDIR | awk -F "\"" '{print $2}') +CFG_PATH=$CRASHDIR/configs/ShellCrash.cfg +TMPDIR=/tmp/ShellCrash && [ ! -f $TMPDIR ] && mkdir -p $TMPDIR #脚本内部工具 getconfig(){ #加载配置文件 source $CFG_PATH &> /dev/null #默认设置 - [ -z "$bindir" ] && bindir=$clashdir + [ -z "$bindir" ] && bindir=$CRASHDIR [ -z "$redir_mod" ] && [ "$USER" = "root" -o "$USER" = "admin" ] && redir_mod=Redir模式 [ -z "$redir_mod" ] && redir_mod=纯净模式 [ -z "$skip_cert" ] && skip_cert=已开启 @@ -34,7 +34,7 @@ getconfig(){ [ -z "$multiport" ] && multiport='22,53,80,123,143,194,443,465,587,853,993,995,5222,8080,8443' [ "$common_ports" = "已开启" ] && ports="-m multiport --dports $multiport" #yaml - [ -z "$yaml" ] && yaml=$clashdir/yamls/config.yaml + [ -z "$yaml" ] && yaml=$CRASHDIR/yamls/config.yaml } setconfig(){ #参数1代表变量名,参数2代表变量值,参数3即文件路径 @@ -55,15 +55,15 @@ compare(){ } logger(){ #$1日志内容$2显示颜色$3是否推送 - [ -n "$2" ] && echo -e "\033[$2m$1\033[0m" + [ -n "$2" -a "$2" != 0 ] && echo -e "\033[$2m$1\033[0m" log_text="$(date "+%G-%m-%d_%H:%M:%S")~$1" - echo $log_text >> $TMPDIR/ShellClash_log - [ "$(wc -l $TMPDIR/ShellClash_log | awk '{print $1}')" -gt 99 ] && sed -i '1,5d' $TMPDIR/ShellClash_log + echo $log_text >> $TMPDIR/ShellCrash.log + [ "$(wc -l $TMPDIR/ShellCrash.log | awk '{print $1}')" -gt 99 ] && sed -i '1,5d' $TMPDIR/ShellCrash.log [ -z "$3" ] && { getconfig [ -n "$device_name" ] && log_text="$log_text($device_name)" [ -n "$(pidof clash)" ] && { - [ -n "$authentication" ] && auth="$authentication@" + [ -n "$authentication" ] && auth="$authentication@" export https_proxy="http://${auth}127.0.0.1:$mix_port" } [ -n "$push_TG" ] && { @@ -143,7 +143,7 @@ getlanip(){ while [ "$i" -le "10" ];do host_ipv4=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'br' | grep -Ev 'iot' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/br.*$//g' | sed 's/metric.*$//g' ) #ipv4局域网网段 [ "$ipv6_redir" = "已开启" ] && host_ipv6=$(ip a 2>&1 | grep -w 'inet6' | grep -E 'global' | sed 's/.*inet6.//g' | sed 's/scope.*$//g' ) #ipv6公网地址段 - [ -f $TMPDIR/ShellClash_log ] && break + [ -f $TMPDIR/ShellCrash.log ] && break [ -n "$host_ipv4" -a -n "$host_ipv6" ] && break sleep 2 && i=$((i+1)) done @@ -163,10 +163,10 @@ getlanip(){ getyaml(){ [ -z "$rule_link" ] && rule_link=1 [ -z "$server_link" ] && server_link=1 - Server=$(grep -aE '^3|^4' $clashdir/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}') - [ -n "$(echo $Url | grep -oE 'vless:|hysteria:')" ] && Server=$(grep -aE '^4' $clashdir/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}') - [ "$retry" = 4 ] && Server=$(grep -aE '^497' $clashdir/configs/servers.list | awk '{print $3}') - Config=$(grep -aE '^5' $clashdir/configs/servers.list | sed -n ""$rule_link"p" | awk '{print $3}') + Server=$(grep -aE '^3|^4' $CRASHDIR/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}') + [ -n "$(echo $Url | grep -oE 'vless:|hysteria:')" ] && Server=$(grep -aE '^4' $CRASHDIR/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}') + [ "$retry" = 4 ] && Server=$(grep -aE '^497' $CRASHDIR/configs/servers.list | awk '{print $3}') + Config=$(grep -aE '^5' $CRASHDIR/configs/servers.list | sed -n ""$rule_link"p" | awk '{print $3}') #如果传来的是Url链接则合成Https链接,否则直接使用Https链接 if [ -z "$Https" ];then Https="$Server/sub?target=clash&insert=true&new_name=true&scv=true&udp=true&exclude=$exclude&include=$include&url=$Url&config=$Config" @@ -191,7 +191,7 @@ getyaml(){ else if [ "$retry" = 4 ];then logger "无法获取配置文件,请检查链接格式以及网络连接状态!" 31 - echo -e "\033[32m你也可以尝试使用浏览器下载配置文件后,使用WinSCP手动上传到$TMPDIR目录!\033[0m" + echo -e "\033[32m也可用浏览器下载以上链接后,使用WinSCP手动上传到/tmp目录后执行clash命令!\033[0m" exit 1 elif [ "$retry" = 3 ];then retry=4 @@ -257,7 +257,7 @@ getyaml(){ if [ "$?" != "0" ];then logger "配置文件加载失败!请查看报错信息!" 31 $bindir/clash -t -d $bindir -f $yamlnew - echo "$($bindir/clash -t -d $bindir -f $yamlnew)" >> $TMPDIR/ShellClash_log + echo "$($bindir/clash -t -d $bindir -f $yamlnew)" >> $TMPDIR/ShellCrash.log exit 1 fi fi @@ -280,19 +280,19 @@ modify_yaml(){ [ "$ipv6_dns" = "已开启" ] && dns_v6='true' || dns_v6='false' external="external-controller: 0.0.0.0:$db_port" if [ "$redir_mod" = "混合模式" -o "$redir_mod" = "Tun模式" ];then - [ "$clashcore" = 'clash.meta' ] && tun_meta=', device: utun, auto-route: false' + [ "$clashcore" = 'meta' ] && tun_meta=', device: utun, auto-route: false' tun="tun: {enable: true, stack: system$tun_meta}" else tun='tun: {enable: false}' fi exper='experimental: {ignore-resolve-fail: true, interface-name: en0}' #Meta内核专属配置 - [ "$clashcore" = 'clash.meta' ] && { + [ "$clashcore" = 'meta' ] && { [ "$redir_mod" != "纯净模式" ] && find_process='find-process-mode: "off"' } #dns配置 - [ -z "$(cat $clashdir/yamls/user.yaml 2>/dev/null | grep '^dns:')" ] && { - [ "$clashcore" = 'clash.meta' ] && dns_default_meta='- https://223.5.5.5/dns-query' + [ -z "$(cat $CRASHDIR/yamls/user.yaml 2>/dev/null | grep '^dns:')" ] && { + [ "$clashcore" = 'meta' ] && dns_default_meta='- https://223.5.5.5/dns-query' cat > $TMPDIR/dns.yaml </dev/null | grep '\.' | sed "s/^/ - '/" | sed "s/$/'/" >> $TMPDIR/dns.yaml + cat $CRASHDIR/configs/fake_ip_filter $CRASHDIR/configs/fake_ip_filter.list 2>/dev/null | grep '\.' | sed "s/^/ - '/" | sed "s/$/'/" >> $TMPDIR/dns.yaml else echo " - '+.*'" >> $TMPDIR/dns.yaml fi @@ -318,13 +318,13 @@ EOF fallback-filter: geoip: true EOF - [ -s $clashdir/configs/fallback_filter.list ] && { + [ -s $CRASHDIR/configs/fallback_filter.list ] && { echo " domain:" >> $TMPDIR/dns.yaml - cat $clashdir/configs/fallback_filter.list | grep '\.' | sed "s/^/ - '/" | sed "s/$/'/" >> $TMPDIR/dns.yaml + cat $CRASHDIR/configs/fallback_filter.list | grep '\.' | sed "s/^/ - '/" | sed "s/$/'/" >> $TMPDIR/dns.yaml } } #域名嗅探配置 - [ "$sniffer" = "已启用" ] && [ "$clashcore" = "clash.meta" ] && sniffer_set="sniffer: {enable: true, skip-domain: [Mijia Cloud], sniff: {tls: {ports: [443, 8443]}, http: {ports: [80, 8080-8880]}}}" + [ "$sniffer" = "已启用" ] && [ "$clashcore" = "meta" ] && sniffer_set="sniffer: {enable: true, skip-domain: [Mijia Cloud], sniff: {tls: {ports: [443, 8443]}, http: {ports: [80, 8080-8880]}}}" [ "$clashcore" = "clashpre" ] && [ "$dns_mod" = "redir_host" ] && exper="experimental: {ignore-resolve-fail: true, interface-name: en0, sniff-tls-sni: true}" #生成set.yaml cat > $TMPDIR/set.yaml </dev/null)" ];then + if [ "$hosts_opt" != "未启用" ] && [ -z "$(grep -aE '^hosts:' $CRASHDIR/yamls/user.yaml 2>/dev/null)" ];then #NTP劫持 cat >> $TMPDIR/hosts.yaml </dev/null)" ] && { + [ -n "$(grep -Ev '^#' $CRASHDIR/yamls/proxy-groups.yaml 2>/dev/null)" ] && { #获取空格数 space_name=$(grep -aE '^ *- name: ' $TMPDIR/proxy-groups.yaml | head -n 1 | grep -oE '^ *') space_proxy=$(grep -A 1 'proxies:$' $TMPDIR/proxy-groups.yaml | grep -aE '^ *- ' | head -n 1 | grep -oE '^ *') #合并自定义策略组到proxy-groups.yaml - cat $clashdir/yamls/proxy-groups.yaml | sed "/^#/d" | sed "s/#.*//g" | sed '1i\ #自定义策略组开始' | sed '$a\ #自定义策略组结束' | sed "s/^ */${space_name} /g" | sed "s/^ *- /${space_proxy}- /g" | sed "s/^ *- name: /${space_name}- name: /g" > $TMPDIR/proxy-groups_add.yaml + cat $CRASHDIR/yamls/proxy-groups.yaml | sed "/^#/d" | sed "s/#.*//g" | sed '1i\ #自定义策略组开始' | sed '$a\ #自定义策略组结束' | sed "s/^ */${space_name} /g" | sed "s/^ *- /${space_proxy}- /g" | sed "s/^ *- name: /${space_name}- name: /g" > $TMPDIR/proxy-groups_add.yaml cat $TMPDIR/proxy-groups.yaml >> $TMPDIR/proxy-groups_add.yaml mv -f $TMPDIR/proxy-groups_add.yaml $TMPDIR/proxy-groups.yaml oldIFS="$IFS" - grep "\- name: " $clashdir/yamls/proxy-groups.yaml | sed "/^#/d" | while read line;do #将自定义策略组插入现有的proxy-group + grep "\- name: " $CRASHDIR/yamls/proxy-groups.yaml | sed "/^#/d" | while read line;do #将自定义策略组插入现有的proxy-group new_group=$(echo $line | grep -Eo '^ *- name:.*#' | cut -d'#' -f1 | sed 's/.*name: //g') proxy_groups=$(echo $line | grep -Eo '#.*' | sed "s/#//" ) IFS="#" @@ -404,11 +404,11 @@ EOF #插入自定义代理 sed -i "/#自定义代理/d" $TMPDIR/proxies.yaml sed -i "/#自定义代理/d" $TMPDIR/proxy-groups.yaml - [ -n "$(grep -Ev '^#' $clashdir/yamls/proxies.yaml 2>/dev/null)" ] && { + [ -n "$(grep -Ev '^#' $CRASHDIR/yamls/proxies.yaml 2>/dev/null)" ] && { space_proxy=$(cat $TMPDIR/proxies.yaml | grep -aE '^ *- ' | head -n 1 | grep -oE '^ *') #获取空格数 - cat $clashdir/yamls/proxies.yaml | sed "s/^ *- /${space_proxy}- /g" | sed "/^#/d" | sed "/^ *$/d" | sed 's/#.*/ #自定义代理/g' >> $TMPDIR/proxies.yaml #插入节点 + cat $CRASHDIR/yamls/proxies.yaml | sed "s/^ *- /${space_proxy}- /g" | sed "/^#/d" | sed "/^ *$/d" | sed 's/#.*/ #自定义代理/g' >> $TMPDIR/proxies.yaml #插入节点 oldIFS="$IFS" - cat $clashdir/yamls/proxies.yaml | sed "/^#/d" | while read line;do #将节点插入proxy-group + cat $CRASHDIR/yamls/proxies.yaml | sed "/^#/d" | while read line;do #将节点插入proxy-group proxy_name=$(echo $line | grep -Eo 'name: .+, ' | cut -d',' -f1 | sed 's/name: //g') proxy_groups=$(echo $line | grep -Eo '#.*' | sed "s/#//" ) IFS="#" @@ -427,23 +427,23 @@ EOF #节点绕过功能支持 sed -i "/#节点绕过/d" $TMPDIR/rules.yaml [ "$proxies_bypass" = "已启用" ] && { - cat $TMPDIR/proxies.yaml | sed '/^proxy-/,$d' | sed '/^rule-/,$d' | grep -v '^\s*#' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk '!a[$0]++' | sed 's/^/\ -\ IP-CIDR,/g' | sed 's|$|/32,DIRECT #节点绕过|g' >> $TMPDIR/proxies_bypass + cat $TMPDIR/proxies.yaml | sed '/^proxy-/,$d' | sed '/^rule-/,$d' | grep -v '^\s*#' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk '!a[$0]++' | sed 's/^/\ -\ IP-CIDR,/g' | sed 's|$|/32,DIRECT,no-resolve #节点绕过|g' >> $TMPDIR/proxies_bypass cat $TMPDIR/proxies.yaml | sed '/^proxy-/,$d' | sed '/^rule-/,$d' | grep -v '^\s*#' | grep -vE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -oE '[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?'| awk '!a[$0]++' | sed 's/^/\ -\ DOMAIN,/g' | sed 's/$/,DIRECT #节点绕过/g' >> $TMPDIR/proxies_bypass cat $TMPDIR/rules.yaml >> $TMPDIR/proxies_bypass mv -f $TMPDIR/proxies_bypass $TMPDIR/rules.yaml } #插入自定义规则 sed -i "/#自定义规则/d" $TMPDIR/rules.yaml - [ -f $clashdir/yamls/rules.yaml ] && { - cat $clashdir/yamls/rules.yaml | sed "/^#/d" | sed '$a\' | sed 's/$/ #自定义规则/g' > $TMPDIR/rules.add + [ -f $CRASHDIR/yamls/rules.yaml ] && { + cat $CRASHDIR/yamls/rules.yaml | sed "/^#/d" | sed '$a\' | sed 's/$/ #自定义规则/g' > $TMPDIR/rules.add cat $TMPDIR/rules.yaml >> $TMPDIR/rules.add mv -f $TMPDIR/rules.add $TMPDIR/rules.yaml } #对齐rules中的空格 sed -i 's/^ *-/ -/g' $TMPDIR/rules.yaml #合并文件 - [ -s $clashdir/yamls/user.yaml ] && { - yaml_user=$clashdir/yamls/user.yaml + [ -s $CRASHDIR/yamls/user.yaml ] && { + yaml_user=$CRASHDIR/yamls/user.yaml #set和user去重,且优先使用user.yaml cp -f $TMPDIR/set.yaml $TMPDIR/set_bak.yaml for char in mode allow-lan log-level tun experimental interface-name dns store-selected;do @@ -452,7 +452,7 @@ EOF } [ -s $TMPDIR/dns.yaml ] && yaml_dns=$TMPDIR/dns.yaml [ -s $TMPDIR/hosts.yaml ] && yaml_hosts=$TMPDIR/hosts.yaml - [ -s $clashdir/yamls/others.yaml ] && yaml_others=$clashdir/yamls/others.yaml + [ -s $CRASHDIR/yamls/others.yaml ] && yaml_others=$CRASHDIR/yamls/others.yaml yaml_add= for char in $yaml_char;do #将额外配置文件合并 [ -s $TMPDIR/${char}.yaml ] && { @@ -485,8 +485,8 @@ EOF #设置路由规则 cn_ip_route(){ [ ! -f $bindir/cn_ip.txt ] && { - if [ -f $clashdir/cn_ip.txt ];then - mv $clashdir/cn_ip.txt $bindir/cn_ip.txt + if [ -f $CRASHDIR/cn_ip.txt ];then + mv $CRASHDIR/cn_ip.txt $bindir/cn_ip.txt else logger "未找到cn_ip列表,正在下载!" 33 $0 webget $bindir/cn_ip.txt "$update_url/bin/geodata/china_ip_list.txt" @@ -504,8 +504,8 @@ cn_ip_route(){ } cn_ipv6_route(){ [ ! -f $bindir/cn_ipv6.txt ] && { - if [ -f $clashdir/cn_ipv6.txt ];then - mv $clashdir/cn_ipv6.txt $bindir/cn_ipv6.txt + if [ -f $CRASHDIR/cn_ipv6.txt ];then + mv $CRASHDIR/cn_ipv6.txt $bindir/cn_ipv6.txt else logger "未找到cn_ipv6列表,正在下载!" 33 $0 webget $bindir/cn_ipv6.txt "$update_url/bin/geodata/china_ipv6_list.txt" @@ -534,12 +534,12 @@ start_redir(){ [ "$dns_mod" = "redir_host" -a "$cn_ip_route" = "已开启" ] && \ iptables -t nat -A clash -m set --match-set cn_ip dst -j RETURN 2>/dev/null #局域网设备过滤 - if [ "$macfilter_type" = "白名单" -a -n "$(cat $clashdir/configs/mac)" ];then - for mac in $(cat $clashdir/configs/mac); do #mac白名单 + if [ "$macfilter_type" = "白名单" -a -n "$(cat $CRASHDIR/configs/mac)" ];then + for mac in $(cat $CRASHDIR/configs/mac); do #mac白名单 iptables -t nat -A clash -p tcp -m mac --mac-source $mac -j REDIRECT --to-ports $redir_port done else - for mac in $(cat $clashdir/configs/mac); do #mac黑名单 + for mac in $(cat $CRASHDIR/configs/mac); do #mac黑名单 iptables -t nat -A clash -m mac --mac-source $mac -j RETURN done #仅代理本机局域网网段流量 @@ -560,12 +560,12 @@ start_redir(){ [ "$dns_mod" = "redir_host" -a "$cn_ipv6_route" = "已开启" ] && \ ip6tables -t nat -A clashv6 -m set --match-set cn_ip6 dst -j RETURN 2>/dev/null #局域网设备过滤 - if [ "$macfilter_type" = "白名单" -a -n "$(cat $clashdir/configs/mac)" ];then - for mac in $(cat $clashdir/configs/mac); do #mac白名单 + if [ "$macfilter_type" = "白名单" -a -n "$(cat $CRASHDIR/configs/mac)" ];then + for mac in $(cat $CRASHDIR/configs/mac); do #mac白名单 ip6tables -t nat -A clashv6 -p tcp -m mac --mac-source $mac -j REDIRECT --to-ports $redir_port done else - for mac in $(cat $clashdir/configs/mac); do #mac黑名单 + for mac in $(cat $CRASHDIR/configs/mac); do #mac黑名单 ip6tables -t nat -A clashv6 -m mac --mac-source $mac -j RETURN done #仅代理本机局域网网段流量 @@ -585,33 +585,37 @@ start_ipt_dns(){ } #设置dns转发 iptables -t nat -N clash_dns - if [ "$macfilter_type" = "白名单" -a -n "$(cat $clashdir/configs/mac)" ];then - for mac in $(cat $clashdir/configs/mac); do #mac白名单 + if [ "$macfilter_type" = "白名单" -a -n "$(cat $CRASHDIR/configs/mac)" ];then + for mac in $(cat $CRASHDIR/configs/mac); do #mac白名单 iptables -t nat -A clash_dns -p udp -m mac --mac-source $mac -j REDIRECT --to $dns_port done else - for mac in $(cat $clashdir/configs/mac); do #mac黑名单 + for mac in $(cat $CRASHDIR/configs/mac); do #mac黑名单 iptables -t nat -A clash_dns -m mac --mac-source $mac -j RETURN done + iptables -t nat -A clash_dns -p tcp -j REDIRECT --to $dns_port iptables -t nat -A clash_dns -p udp -j REDIRECT --to $dns_port fi + iptables -t nat -I PREROUTING -p tcp --dport 53 -j clash_dns iptables -t nat -I PREROUTING -p udp --dport 53 -j clash_dns #ipv6DNS if [ -n "$(lsmod | grep 'ip6table_nat')" -a -n "$(lsmod | grep 'xt_nat')" ];then ip6tables -t nat -N clashv6_dns > /dev/null 2>&1 - if [ "$macfilter_type" = "白名单" -a -n "$(cat $clashdir/configs/mac)" ];then - for mac in $(cat $clashdir/configs/mac); do #mac白名单 + if [ "$macfilter_type" = "白名单" -a -n "$(cat $CRASHDIR/configs/mac)" ];then + for mac in $(cat $CRASHDIR/configs/mac); do #mac白名单 ip6tables -t nat -A clashv6_dns -p udp -m mac --mac-source $mac -j REDIRECT --to $dns_port done else - for mac in $(cat $clashdir/configs/mac); do #mac黑名单 + for mac in $(cat $CRASHDIR/configs/mac); do #mac黑名单 ip6tables -t nat -A clashv6_dns -m mac --mac-source $mac -j RETURN done + ip6tables -t nat -A clashv6_dns -p tcp -j REDIRECT --to $dns_port ip6tables -t nat -A clashv6_dns -p udp -j REDIRECT --to $dns_port fi + ip6tables -t nat -I PREROUTING -p tcp --dport 53 -j clashv6_dns ip6tables -t nat -I PREROUTING -p udp --dport 53 -j clashv6_dns else - ip6tables -I INPUT -p udp --dport 53 -m comment --comment "ShellClash-IPV6_DNS-REJECT" -j REJECT 2>/dev/null + ip6tables -I INPUT -p udp --dport 53 -m comment --comment "ShellCrash-IPV6_DNS-REJECT" -j REJECT 2>/dev/null fi return 0 @@ -632,12 +636,12 @@ start_tproxy(){ iptables -t mangle -A clash -m set --match-set cn_ip dst -j RETURN 2>/dev/null #tcp&udp分别进代理链 tproxy_set(){ - if [ "$macfilter_type" = "白名单" -a -n "$(cat $clashdir/configs/mac)" ];then - for mac in $(cat $clashdir/configs/mac); do #mac白名单 + if [ "$macfilter_type" = "白名单" -a -n "$(cat $CRASHDIR/configs/mac)" ];then + for mac in $(cat $CRASHDIR/configs/mac); do #mac白名单 iptables -t mangle -A clash -p $1 -m mac --mac-source $mac -j TPROXY --on-port $tproxy_port --tproxy-mark $fwmark done else - for mac in $(cat $clashdir/configs/mac); do #mac黑名单 + for mac in $(cat $CRASHDIR/configs/mac); do #mac黑名单 iptables -t mangle -A clash -m mac --mac-source $mac -j RETURN done #仅代理本机局域网网段流量 @@ -654,7 +658,7 @@ start_tproxy(){ #屏蔽QUIC [ "$quic_rj" = 已启用 ] && { [ "$dns_mod" = "redir_host" -a "$cn_ip_route" = "已开启" ] && set_cn_ip='-m set ! --match-set cn_ip dst' - iptables -I INPUT -p udp --dport 443 -m comment --comment "ShellClash-QUIC-REJECT" $set_cn_ip -j REJECT >/dev/null 2>&1 + iptables -I INPUT -p udp --dport 443 -m comment --comment "ShellCrash-QUIC-REJECT" $set_cn_ip -j REJECT >/dev/null 2>&1 } #设置ipv6转发 [ "$ipv6_redir" = "已开启" ] && { @@ -670,14 +674,14 @@ start_tproxy(){ ip6tables -t mangle -A clashv6 -m set --match-set cn_ip6 dst -j RETURN 2>/dev/null #tcp&udp分别进代理链 tproxy_set6(){ - if [ "$macfilter_type" = "白名单" -a -n "$(cat $clashdir/configs/mac)" ];then + if [ "$macfilter_type" = "白名单" -a -n "$(cat $CRASHDIR/configs/mac)" ];then #mac白名单 - for mac in $(cat $clashdir/configs/mac); do + for mac in $(cat $CRASHDIR/configs/mac); do ip6tables -t mangle -A clashv6 -p $1 -m mac --mac-source $mac -j TPROXY --on-port $tproxy_port --tproxy-mark $fwmark done else #mac黑名单 - for mac in $(cat $clashdir/configs/mac); do + for mac in $(cat $CRASHDIR/configs/mac); do ip6tables -t mangle -A clashv6 -m mac --mac-source $mac -j RETURN done #仅代理本机局域网网段流量 @@ -693,7 +697,7 @@ start_tproxy(){ #屏蔽QUIC [ "$quic_rj" = 已启用 ] && { [ "$dns_mod" = "redir_host" -a "$cn_ipv6_route" = "已开启" ] && set_cn_ip6='-m set ! --match-set cn_ip6 dst' - ip6tables -I INPUT -p udp --dport 443 -m comment --comment "ShellClash-QUIC-REJECT" $set_cn_ip6 -j REJECT 2>/dev/null + ip6tables -I INPUT -p udp --dport 443 -m comment --comment "ShellCrash-QUIC-REJECT" $set_cn_ip6 -j REJECT 2>/dev/null } } } @@ -745,8 +749,8 @@ start_tun(){ set_cn_ip='-m set ! --match-set cn_ip dst' set_cn_ip6='-m set ! --match-set cn_ip6 dst' } - iptables -I FORWARD -p udp --dport 443 -o utun -m comment --comment "ShellClash-QUIC-REJECT" $set_cn_ip -j REJECT >/dev/null 2>&1 - ip6tables -I FORWARD -p udp --dport 443 -o utun -m comment --comment "ShellClash-QUIC-REJECT" $set_cn_ip6 -j REJECT >/dev/null 2>&1 + iptables -I FORWARD -p udp --dport 443 -o utun -m comment --comment "ShellCrash-QUIC-REJECT" $set_cn_ip -j REJECT >/dev/null 2>&1 + ip6tables -I FORWARD -p udp --dport 443 -o utun -m comment --comment "ShellCrash-QUIC-REJECT" $set_cn_ip6 -j REJECT >/dev/null 2>&1 fi modprobe xt_mark &>/dev/null && { i=1 @@ -769,12 +773,12 @@ start_tun(){ [ "$dns_mod" = "redir_host" -a "$cn_ip_route" = "已开启" ] && \ iptables -t mangle -A clash -m set --match-set cn_ip dst -j RETURN 2>/dev/null #局域网设备过滤 - if [ "$macfilter_type" = "白名单" -a -n "$(cat $clashdir/configs/mac)" ];then - for mac in $(cat $clashdir/configs/mac); do #mac白名单 + if [ "$macfilter_type" = "白名单" -a -n "$(cat $CRASHDIR/configs/mac)" ];then + for mac in $(cat $CRASHDIR/configs/mac); do #mac白名单 iptables -t mangle -A clash -m mac --mac-source $mac -j MARK --set-mark $fwmark done else - for mac in $(cat $clashdir/configs/mac); do #mac黑名单 + for mac in $(cat $CRASHDIR/configs/mac); do #mac黑名单 iptables -t mangle -A clash -m mac --mac-source $mac -j RETURN done #仅代理本机局域网网段流量 @@ -786,7 +790,7 @@ start_tun(){ [ "$1" = "all" ] && iptables -t mangle -A PREROUTING -p tcp $ports -j clash #设置ipv6转发 - [ "$ipv6_redir" = "已开启" -a "$clashcore" = "clash.meta" ] && { + [ "$ipv6_redir" = "已开启" -a "$clashcore" = "meta" ] && { ip -6 route add default dev utun table 101 ip -6 rule add fwmark $fwmark table 101 ip6tables -t mangle -N clashv6 @@ -798,12 +802,12 @@ start_tun(){ [ "$dns_mod" = "redir_host" -a "$cn_ipv6_route" = "已开启" ] && \ ip6tables -t mangle -A clashv6 -m set --match-set cn_ip6 dst -j RETURN 2>/dev/null #局域网设备过滤 - if [ "$macfilter_type" = "白名单" -a -n "$(cat $clashdir/configs/mac)" ];then - for mac in $(cat $clashdir/configs/mac); do #mac白名单 + if [ "$macfilter_type" = "白名单" -a -n "$(cat $CRASHDIR/configs/mac)" ];then + for mac in $(cat $CRASHDIR/configs/mac); do #mac白名单 ip6tables -t mangle -A clashv6 -m mac --mac-source $mac -j MARK --set-mark $fwmark done else - for mac in $(cat $clashdir/configs/mac); do #mac黑名单 + for mac in $(cat $CRASHDIR/configs/mac); do #mac黑名单 ip6tables -t mangle -A clashv6 -m mac --mac-source $mac -j RETURN done #仅代理本机局域网网段流量 @@ -833,8 +837,8 @@ start_nft(){ } [ -n "$(echo $redir_mod|grep Nft)" ] && { #过滤局域网设备 - [ -n "$(cat $clashdir/configs/mac)" ] && { - MAC=$(awk '{printf "%s, ",$1}' $clashdir/configs/mac) + [ -n "$(cat $CRASHDIR/configs/mac)" ] && { + MAC=$(awk '{printf "%s, ",$1}' $CRASHDIR/configs/mac) [ "$macfilter_type" = "黑名单" ] && \ nft add rule inet shellclash prerouting ether saddr {$MAC} return || \ nft add rule inet shellclash prerouting ether saddr != {$MAC} return @@ -877,13 +881,13 @@ start_nft(){ nft add chain inet shellclash input { type filter hook input priority 0 \; } [ -n "$CN_IP" ] && nft add rule inet shellclash input ip daddr {$CN_IP} return [ -n "$CN_IP6" ] && nft add rule inet shellclash input ip6 daddr {$CN_IP6} return - nft add rule inet shellclash input udp dport 443 reject comment 'ShellClash-QUIC-REJECT' + nft add rule inet shellclash input udp dport 443 reject comment 'ShellCrash-QUIC-REJECT' } #代理本机(仅TCP) [ "$local_proxy" = "已开启" ] && [ "$local_type" = "nftables增强模式" ] && { #dns nft add chain inet shellclash dns_out { type nat hook output priority -100 \; } - nft add rule inet shellclash dns_out meta skgid {453,7890} return && \ + nft add rule inet shellclash dns_out meta skgid { 453, 7890 } return && \ nft add rule inet shellclash dns_out udp dport 53 redirect to $dns_port #output nft add chain inet shellclash output { type nat hook output priority -100 \; } @@ -905,8 +909,8 @@ start_nft(){ start_nft_dns(){ nft add chain inet shellclash dns { type nat hook prerouting priority -100 \; } #过滤局域网设备 - [ -n "$(cat $clashdir/configs/mac)" ] && { - MAC=$(awk '{printf "%s, ",$1}' $clashdir/configs/mac) + [ -n "$(cat $CRASHDIR/configs/mac)" ] && { + MAC=$(awk '{printf "%s, ",$1}' $CRASHDIR/configs/mac) [ "$macfilter_type" = "黑名单" ] && \ nft add rule inet shellclash dns ether saddr {$MAC} return || \ nft add rule inet shellclash dns ether saddr != {$MAC} return @@ -952,6 +956,7 @@ stop_firewall(){ iptables -t nat -F clash 2> /dev/null iptables -t nat -X clash 2> /dev/null #dns + iptables -t nat -D PREROUTING -p tcp --dport 53 -j clash_dns 2> /dev/null iptables -t nat -D PREROUTING -p udp --dport 53 -j clash_dns 2> /dev/null iptables -t nat -F clash_dns 2> /dev/null iptables -t nat -X clash_dns 2> /dev/null @@ -960,8 +965,8 @@ stop_firewall(){ iptables -D FORWARD -s 198.18.0.0/16 -o utun -j RETURN 2> /dev/null #屏蔽QUIC [ "$dns_mod" = "redir_host" -a "$cn_ip_route" = "已开启" ] && set_cn_ip='-m set ! --match-set cn_ip dst' - iptables -D INPUT -p udp --dport 443 -m comment --comment "ShellClash-QUIC-REJECT" $set_cn_ip -j REJECT 2> /dev/null - iptables -D FORWARD -p udp --dport 443 -o utun -m comment --comment "ShellClash-QUIC-REJECT" $set_cn_ip -j REJECT 2> /dev/null + iptables -D INPUT -p udp --dport 443 -m comment --comment "ShellCrash-QUIC-REJECT" $set_cn_ip -j REJECT 2> /dev/null + iptables -D FORWARD -p udp --dport 443 -o utun -m comment --comment "ShellCrash-QUIC-REJECT" $set_cn_ip -j REJECT 2> /dev/null #本机代理 iptables -t nat -D OUTPUT -p tcp $ports -j clash_out 2> /dev/null iptables -t nat -F clash_out 2> /dev/null @@ -996,20 +1001,21 @@ stop_firewall(){ ckcmd ip6tables && { #redir ip6tables -t nat -D PREROUTING -p tcp $ports -j clashv6 2> /dev/null - ip6tables -D INPUT -p udp --dport 53 -m comment --comment "ShellClash-IPV6_DNS-REJECT" -j REJECT 2> /dev/null + ip6tables -D INPUT -p udp --dport 53 -m comment --comment "ShellCrash-IPV6_DNS-REJECT" -j REJECT 2> /dev/null ip6tables -t nat -F clashv6 2> /dev/null ip6tables -t nat -X clashv6 2> /dev/null #dns + ip6tables -t nat -D PREROUTING -p tcp --dport 53 -j clashv6_dns 2>/dev/null ip6tables -t nat -D PREROUTING -p udp --dport 53 -j clashv6_dns 2>/dev/null ip6tables -t nat -F clashv6_dns 2> /dev/null ip6tables -t nat -X clashv6_dns 2> /dev/null #tun ip6tables -D FORWARD -o utun -j ACCEPT 2> /dev/null - ip6tables -D FORWARD -p udp --dport 443 -o utun -m comment --comment "ShellClash-QUIC-REJECT" -j REJECT >/dev/null 2>&1 + ip6tables -D FORWARD -p udp --dport 443 -o utun -m comment --comment "ShellCrash-QUIC-REJECT" -j REJECT >/dev/null 2>&1 #屏蔽QUIC [ "$dns_mod" = "redir_host" -a "$cn_ipv6_route" = "已开启" ] && set_cn_ip6='-m set ! --match-set cn_ip6 dst' - iptables -D INPUT -p udp --dport 443 -m comment --comment "ShellClash-QUIC-REJECT" $set_cn_ip6 -j REJECT 2> /dev/null - iptables -D FORWARD -p udp --dport 443 -o utun -m comment --comment "ShellClash-QUIC-REJECT" $set_cn_ip6 -j REJECT 2> /dev/null + iptables -D INPUT -p udp --dport 443 -m comment --comment "ShellCrash-QUIC-REJECT" $set_cn_ip6 -j REJECT 2> /dev/null + iptables -D FORWARD -p udp --dport 443 -o utun -m comment --comment "ShellCrash-QUIC-REJECT" $set_cn_ip6 -j REJECT 2> /dev/null #公网访问 ip6tables -D INPUT -p tcp --dport $mix_port -j REJECT 2> /dev/null ip6tables -D INPUT -p tcp --dport $mix_port -j ACCEPT 2> /dev/null @@ -1020,7 +1026,7 @@ stop_firewall(){ ip6tables -t mangle -D PREROUTING -p udp $ports -j clashv6 2> /dev/null ip6tables -t mangle -F clashv6 2> /dev/null ip6tables -t mangle -X clashv6 2> /dev/null - ip6tables -D INPUT -p udp --dport 443 -m comment --comment "ShellClash-QUIC-REJECT" $set_cn_ip -j REJECT 2> /dev/null + ip6tables -D INPUT -p udp --dport 443 -m comment --comment "ShellCrash-QUIC-REJECT" $set_cn_ip -j REJECT 2> /dev/null } #清理ipset规则 ipset destroy cn_ip >/dev/null 2>&1 @@ -1042,6 +1048,8 @@ stop_firewall(){ nft flush table inet shellclash >/dev/null 2>&1 nft delete table inet shellclash >/dev/null 2>&1 } + #还原防火墙文件 + [ -s /etc/init.d/firewall.bak ] && mv -f /etc/init.d/firewall.bak /etc/init.d/firewall } #面板配置保存相关 web_save(){ @@ -1055,10 +1063,10 @@ web_save(){ rm -rf $TMPDIR/clash_web_check_$USER #对比文件,如果有变动且不为空则写入磁盘,否则清除缓存 if [ -s $TMPDIR/clash_web_save_$USER ];then - compare $TMPDIR/clash_web_save_$USER $clashdir/configs/web_save - [ "$?" = 0 ] && rm -rf $TMPDIR/clash_web_save_$USER || mv -f $TMPDIR/clash_web_save_$USER $clashdir/configs/web_save + compare $TMPDIR/clash_web_save_$USER $CRASHDIR/configs/web_save + [ "$?" = 0 ] && rm -rf $TMPDIR/clash_web_save_$USER || mv -f $TMPDIR/clash_web_save_$USER $CRASHDIR/configs/web_save else - echo > $clashdir/configs/web_save + echo > $CRASHDIR/configs/web_save fi } web_restore(){ @@ -1075,11 +1083,11 @@ web_restore(){ i=$((i+1)) done #发送数据 - num=$(cat $clashdir/configs/web_save | wc -l) + num=$(cat $CRASHDIR/configs/web_save | wc -l) i=1 while [ "$i" -le "$num" ];do - group_name=$(awk -F ',' 'NR=="'${i}'" {print $1}' $clashdir/configs/web_save | sed 's/ /%20/g') - now_name=$(awk -F ',' 'NR=="'${i}'" {print $2}' $clashdir/configs/web_save) + group_name=$(awk -F ',' 'NR=="'${i}'" {print $1}' $CRASHDIR/configs/web_save | sed 's/ /%20/g') + now_name=$(awk -F ',' 'NR=="'${i}'" {print $2}' $CRASHDIR/configs/web_save) put_save http://127.0.0.1:${db_port}/proxies/${group_name} "{\"name\":\"${now_name}\"}" i=$((i+1)) done @@ -1116,7 +1124,7 @@ bfstart(){ #读取配置文件 getconfig [ ! -d $bindir/ui ] && mkdir -p $bindir/ui - [ -z "$update_url" ] && update_url=https://fastly.jsdelivr.net/gh/juewuy/ShellClash@master + [ -z "$update_url" ] && update_url=https://fastly.jsdelivr.net/gh/juewuy/ShellCrash@master #检查yaml配置文件 if [ ! -f $yaml ];then if [ -n "$Url" -o -n "$Https" ];then @@ -1129,35 +1137,35 @@ bfstart(){ fi fi #检测vless/hysteria协议 - if [ -n "$(cat $yaml | grep -oE 'type: vless|type: hysteria')" ] && [ "$clashcore" != "clash.meta" ];then + if [ -n "$(cat $yaml | grep -oE 'type: vless|type: hysteria')" ] && [ "$clashcore" != "meta" ];then echo ----------------------------------------------- - logger "检测到vless/hysteria协议!将改为使用clash.meta核心启动!" 33 + logger "检测到vless/hysteria协议!将改为使用meta核心启动!" 33 rm -rf $bindir/clash - clashcore=clash.meta - setconfig clashcore clash.meta + clashcore=meta + setconfig clashcore meta echo ----------------------------------------------- fi #检测是否存在高级版规则 if [ "$clashcore" = "clash" -a -n "$(cat $yaml | grep -aE '^script:|proxy-providers|rule-providers|rule-set')" ];then echo ----------------------------------------------- - logger "检测到高级规则!将改为使用clash.meta核心启动!" 33 + logger "检测到高级规则!将改为使用meta核心启动!" 33 rm -rf $bindir/clash - clashcore=clash.meta - setconfig clashcore clash.meta + clashcore=meta + setconfig clashcore meta echo ----------------------------------------------- fi #检查clash核心 if [ ! -f $bindir/clash ];then - if [ -f $clashdir/clash ];then - mv $clashdir/clash $bindir/clash + if [ -f $CRASHDIR/clash ];then + mv $CRASHDIR/clash $bindir/clash else logger "未找到clash核心,正在下载!" 33 if [ -z "$clashcore" ];then [ "$redir_mod" = "混合模式" -o "$redir_mod" = "Tun模式" ] && clashcore=clashpre || clashcore=clash fi - [ -z "$cpucore" ] && source $clashdir/getdate.sh && getcpucore + [ -z "$cpucore" ] && source $CRASHDIR/getdate.sh && getcpucore [ -z "$cpucore" ] && logger 找不到设备的CPU信息,请手动指定处理器架构类型! 31 && setcpucore - [ "$update_url" = "https://jwsc.eu.org:8888" ] && [ "$clashcore" != 'clash' ] && update_url=https://fastly.jsdelivr.net/gh/juewuy/ShellClash@master + [ "$update_url" = "https://jwsc.eu.org:8888" ] && [ "$clashcore" != 'clash' ] && update_url=https://fastly.jsdelivr.net/gh/juewuy/ShellCrash@master $0 webget $bindir/clash "$update_url/bin/$clashcore/clash-linux-$cpucore" #校验内核 chmod +x $bindir/clash 2>/dev/null @@ -1175,8 +1183,8 @@ bfstart(){ [ ! -x $bindir/clash ] && chmod +x $bindir/clash #检测可执行权限 #检查数据库文件 if [ ! -f $bindir/Country.mmdb ];then - if [ -f $clashdir/Country.mmdb ];then - mv $clashdir/Country.mmdb $bindir/Country.mmdb + if [ -f $CRASHDIR/Country.mmdb ];then + mv $CRASHDIR/Country.mmdb $bindir/Country.mmdb else logger "未找到GeoIP数据库,正在下载!" 33 $0 webget $bindir/Country.mmdb $update_url/bin/geodata/cn_mini.mmdb @@ -1186,8 +1194,8 @@ bfstart(){ fi fi #检查dashboard文件 - if [ -f $clashdir/ui/index.html -a ! -f $bindir/ui/index.html ];then - cp -rf $clashdir/ui $bindir + if [ -f $CRASHDIR/ui/index.html -a ! -f $bindir/ui/index.html ];then + cp -rf $CRASHDIR/ui $bindir fi #检查curl或wget支持 curl --version > /dev/null 2>&1 @@ -1196,10 +1204,10 @@ bfstart(){ #生成pac文件 catpac #预下载GeoSite数据库 - if [ "$clashcore" = "clash.meta" ] && [ ! -f $bindir/GeoSite.dat ] && [ -n "$(cat $yaml|grep -Ei 'geosite')" ];then - [ -f $clashdir/geosite.dat ] && mv -f $clashdir/geosite.dat $clashdir/GeoSite.dat - if [ -f $clashdir/GeoSite.dat ];then - mv -f $clashdir/GeoSite.dat $bindir/GeoSite.dat + if [ "$clashcore" = "meta" ] && [ ! -f $bindir/GeoSite.dat ] && [ -n "$(cat $yaml|grep -Ei 'geosite')" ];then + [ -f $CRASHDIR/geosite.dat ] && mv -f $CRASHDIR/geosite.dat $CRASHDIR/GeoSite.dat + if [ -f $CRASHDIR/GeoSite.dat ];then + mv -f $CRASHDIR/GeoSite.dat $bindir/GeoSite.dat else logger "未找到geosite数据库,正在下载!" 33 $0 webget $bindir/GeoSite.dat $update_url/bin/geodata/geosite.dat @@ -1232,6 +1240,8 @@ bfstart(){ fi #生成配置文件 [ "$disoverride" != "1" ] && modify_yaml || ln -sf $yaml $bindir/config.yaml + #执行条件任务 + [ -s $CRASHDIR/task/bfstart ] && source $CRASHDIR/task/bfstart } afstart(){ @@ -1281,18 +1291,20 @@ afstart(){ [ "$local_type" = "iptables增强模式" ] && start_output [ "$local_type" = "nftables增强模式" ] && [ "$redir_mod" = "纯净模式" ] && start_nft } - ckcmd iptables && start_wan - #标记启动时间 - mark_time - #加载定时任务 - [ -f $clashdir/tools/cron ] && croncmd $clashdir/tools/cron - #启用面板配置自动保存 - cronset '#每10分钟保存节点配置' "*/10 * * * * test -n \"\$(pidof clash)\" && $clashdir/start.sh web_save #每10分钟保存节点配置" - [ -f $clashdir/configs/web_save ] && web_restore & #后台还原面板配置 - #推送日志 - { sleep 5;logger Clash服务已启动!;} & - #同步本机时间 - { ckcmd ntpd && ntpd -n -q -p 203.107.6.88 &>/dev/null;exit 0 ;} & + ckcmd iptables && start_wan #本地防火墙 + mark_time #标记启动时间 + [ -s $CRASHDIR/task/cron ] && croncmd $CRASHDIR/task/cron #加载定时任务 + [ -s $CRASHDIR/configs/web_save ] && web_restore & #后台还原面板配置 + { sleep 5;logger Clash服务已启动!;} & #推送日志 + #执行条件任务 + [ -s $CRASHDIR/task/afstart ] && { source $CRASHDIR/task/afstart ;} & + [ -s $CRASHDIR/task/affirewall -a -s /etc/init.d/firewall -a ! -f /etc/init.d/firewall.bak ] && { + #注入防火墙 + line=$(grep -En "fw3 restart" /etc/init.d/firewall | cut -d ":" -f 1) + sed -i.bak "${line}a\\source $CRASHDIR/task/affirewall" /etc/init.d/firewall + line=$(grep -En "fw3 .* start" /etc/init.d/firewall | cut -d ":" -f 1) + sed -i "${line}a\\source $CRASHDIR/task/affirewall" /etc/init.d/firewall + } else logger "Clash服务启动失败!请查看报错信息!" 33 logger "$($bindir/clash -t -d $bindir | grep -Eo 'error.*=.*')" 31 @@ -1301,6 +1313,7 @@ afstart(){ fi } start_old(){ + bfstart #使用传统后台执行二进制文件的方式执行 if [ "$local_proxy" = "已开启" -a -n "$(echo $local_type | grep '增强模式')" ];then ckcmd su && su=su @@ -1324,10 +1337,8 @@ afstart) start) [ -n "$(pidof clash)" ] && $0 stop #禁止多实例 getconfig - #检测必须文件并下载 - bfstart stop_firewall #清理路由策略 - #使用不同方式启动clash服务 + #使用不同方式启动服务 if [ "$start_old" = "已开启" ];then start_old elif [ -f /etc/rc.common ];then @@ -1344,7 +1355,7 @@ stop) [ -n "$(pidof clash)" ] && web_save #保存面板配置 #删除守护进程&面板配置自动保存 cronset "clash保守模式守护进程" - cronset "保存节点配置" + cronset "保存面板配置" cronset "流媒体预解析" #多种方式结束进程 if [ -f /etc/rc.common ];then @@ -1361,10 +1372,10 @@ restart) $0 start ;; init) - clashdir=$(cd $(dirname $0);pwd) + CRASHDIR=$(cd $(dirname $0);pwd) profile=/etc/profile if [ -d "/etc/storage/clash" ];then - clashdir=/etc/storage/clash + CRASHDIR=/etc/storage/clash i=1 while [ ! -w /etc/profile -a "$i" -lt 10 ];do sleep 5 && i=$((i+1)) @@ -1380,25 +1391,28 @@ init) fi fi sed -i "/alias clash/d" $profile - sed -i "/export clashdir/d" $profile - echo "alias clash=\"$clashdir/clash.sh\"" >> $profile - echo "export clashdir=\"$clashdir\"" >> $profile - [ -f $clashdir/.dis_startup ] && cronset "clash保守模式守护进程" || $0 start + sed -i "/export CRASHDIR/d" $profile + echo "alias clash=\"$CRASHDIR/clash.sh\"" >> $profile + echo "export CRASHDIR=\"$CRASHDIR\"" >> $profile + [ -f $CRASHDIR/.dis_startup ] && cronset "clash保守模式守护进程" || $0 start ;; getyaml) getconfig getyaml && \ - logger ShellClash配置文件更新成功! + logger "任务:【更新订阅并重启服务】配置文件已更新!" ;; updateyaml) getconfig getyaml && \ modify_yaml && \ - put_save http://127.0.0.1:${db_port}/configs "{\"path\":\"${clashdir}/config.yaml\"}" && \ - logger ShellClash配置文件更新成功! + put_save http://127.0.0.1:${db_port}/configs "{\"path\":\"${CRASHDIR}/config.yaml\"}" && \ + logger "任务:【热更新订阅】配置文件已更新!" + ;; +ntp) + { ckcmd ntpd && ntpd -n -q -p 203.107.6.88 &>/dev/null;exit 0 ;} & ;; logger) - logger $2 $3 + logger $2 $3 $4 ;; webget) #设置临时代理 @@ -1406,9 +1420,9 @@ webget) getconfig [ -n "$authentication" ] && auth="$authentication@" export all_proxy="http://${auth}127.0.0.1:$mix_port" - url=$(echo $3 | sed 's#https://fastly.jsdelivr.net/gh/juewuy/ShellClash[@|/]#https://raw.githubusercontent.com/juewuy/ShellClash/#' | sed 's#https://gh.jwsc.eu.org/#https://raw.githubusercontent.com/juewuy/ShellClash/#') + url=$(echo $3 | sed 's#https://fastly.jsdelivr.net/gh/juewuy/ShellCrash[@|/]#https://raw.githubusercontent.com/juewuy/ShellCrash/#' | sed 's#https://gh.jwsc.eu.org/#https://raw.githubusercontent.com/juewuy/ShellCrash/#') else - url=$(echo $3 | sed 's#https://raw.githubusercontent.com/juewuy/ShellClash/#https://fastly.jsdelivr.net/gh/juewuy/ShellClash@#') + url=$(echo $3 | sed 's#https://raw.githubusercontent.com/juewuy/ShellCrash/#https://fastly.jsdelivr.net/gh/juewuy/ShellCrash@#') fi #参数【$2】代表下载目录,【$3】代表在线地址 #参数【$4】代表输出显示,【$4】不启用重定向 @@ -1451,7 +1465,7 @@ web_restore) ;; daemon) getconfig - cronset '#clash保守模式守护进程' "*/1 * * * * test -z \"\$(pidof clash)\" && $clashdir/start.sh restart #clash保守模式守护进程" + cronset '#clash保守模式守护进程' "*/1 * * * * test -z \"\$(pidof clash)\" && $CRASHDIR/start.sh restart #clash保守模式守护进程" ;; cronset) cronset $2 $3 diff --git a/scripts/task.sh b/scripts/task.sh new file mode 100644 index 0000000..fb718a4 --- /dev/null +++ b/scripts/task.sh @@ -0,0 +1,486 @@ +#!/bin/sh +# Copyright (C) Juewuy + +#加载全局变量 +[ -d "/etc/storage/clash" ] && CRASHDIR=/etc/storage/clash +[ -d "/jffs/clash" ] && CRASHDIR=/jffs/clash +[ -z "$CRASHDIR" ] && CRASHDIR=$(cat /etc/profile | grep CRASHDIR | awk -F "\"" '{print $2}') +[ -z "$CRASHDIR" ] && CRASHDIR=$(cat ~/.bashrc | grep CRASHDIR | awk -F "\"" '{print $2}') +[ -z "$bindir" ] && bindir=$CRASHDIR +CFG_PATH=$CRASHDIR/configs/ShellCrash.cfg +TMPDIR=/tmp/ShellCrash && [ ! -f $TMPDIR ] && mkdir -p $TMPDIR +source $CFG_PATH &> /dev/null +setconfig(){ + #参数1代表变量名,参数2代表变量值,参数3即文件路径 + [ -z "$3" ] && configpath=$CFG_PATH || configpath=$3 + [ -n "$(grep ${1} $configpath)" ] && sed -i "s#${1}=.*#${1}=${2}#g" $configpath || echo "${1}=${2}" >> $configpath +} + +#任务命令 +check_update(){ #检查更新工具 + $CRASHDIR/start.sh webget $TMPDIR/clashversion "$update_url/bin/version" echooff + [ "$?" = "0" ] && source $TMPDIR/clashversion 2>/dev/null + rm -rf $TMPDIR/clashversion +} +update_core(){ #自动更新内核 + #检查版本 + check_update + clash_v_new=$(eval echo \$${clashcore}_v) + clash_v_now=$($bindir/clash -v 2>/dev/null | head -n 1 | sed 's/ linux.*//;s/.* //') + if [ -z "$clash_v_new" -o "$clash_v_new" = "clash_v_now" ];then + logger "任务:【自动更新内核】中止-未检测到版本更新" + exit 1 + else + #更新内核 + $CRASHDIR/start.sh webget $TMPDIR/clash.new "$update_url/bin/$clashcore/clash-linux-$cpucore" + if [ "$?" != "0" ];then + logger "任务:【自动更新内核】出错-下载失败!" + rm -rf $TMPDIR/clash.new + return 1 + else + chmod +x $TMPDIR/clash.new + $CRASHDIR/start.sh stop + clashv=$($TMPDIR/clash.new -v 2>/dev/null | sed 's/ linux.*//;s/.* //') + if [ -z "$clashv" ];then + logger "任务:【自动更新内核】出错-下载失败!" + rm -rf $TMPDIR/clash.new + [ $clashcore = meta ] && $CRASHDIR/start.sh start + return 1 + else + mv -f $TMPDIR/clash.new $bindir/clash + logger "任务:【自动更新内核】下载完成,正在重启服务!" + $CRASHDIR/start.sh start + return 0 + fi + fi + fi +} +update_shellclash(){ #自动更新脚本 + #检查版本 + check_update + if [ -z "$versionsh" -o "$versionsh" = "versionsh_l" ];then + logger "任务:【自动更新脚本】中止-未检测到版本更新" + exit 1 + else + $CRASHDIR/start.sh webget $TMPDIR/clashfm.tar.gz "$update_url/bin/clashfm.tar.gz" + if [ "$?" != "0" ];then + rm -rf $TMPDIR/clashfm.tar.gz + logger "任务:【自动更新内核】出错-下载失败!" + return 1 + else + #解压 + tar -zxvf "$TMPDIR/clashfm.tar.gz" -C $CRASHDIR/ + if [ $? -ne 0 ];then + rm -rf $TMPDIR/clashfm.tar.gz + logger "任务:【自动更新内核】出错-解压失败!" + return 1 + else + source $CRASHDIR/init.sh >/dev/null + return 0 + fi + fi + fi +} +update_mmdb(){ #自动更新数据库 + getgeo(){ + #检查版本 + check_update + geo_v="$(echo $2 | awk -F "." '{print $1}')_v" #获取版本号类型比如Country_v + geo_v_new=$GeoIP_v + geo_v_now=$(eval echo \$$geo_v) + if [ -z "$geo_v_new" -o "$geo_v_new" = "$geo_v_now" ];then + logger "任务:【自动更新数据库文件】跳过-未检测到$2版本更新" + else + #更新文件 + $CRASHDIR/start.sh webget $TMPDIR/$1 "$update_url/bin/geodata/$2" + if [ "$?" != "0" ];then + logger "任务:【自动更新数据库文件】更新【$2】下载失败!" + rm -rf $TMPDIR/$1 + return 1 + else + mv -f $TMPDIR/$1 $bindir/$1 + setconfig $geo_v $GeoIP_v + logger "任务:【自动更新数据库文件】更新【$2】成功!" + return 0 + fi + fi + } + [ -n "${Country_v}" ] && getgeo Country.mmdb Country.mmdb + [ -n "${cn_mini_v}" ] && getgeo Country.mmdb cn_mini.mmdb + [ -n "${china_ip_list_v}" ] && getgeo cn_ip.txt china_ip_list.txt + [ -n "${china_ipv6_list_v}" ] && getgeo cn_ipv6.txt china_ipv6_list.txt + [ -n "${geosite_v}" ] && getgeo GeoSite.dat geosite.dat +} +reset_firewall(){ #重设透明路由防火墙 + $CRASHDIR/start.sh stop_firewall + $CRASHDIR/start.sh afstart +} +#任务工具 + +logger(){ + [ "$task_push" = 1 ] && push= || push=off + [ -n "$2" -a "$2" != 0 ] && echo -e "\033[$2m$1\033[0m" + [ "$3" = 'off' ] && push=off + $CRASHDIR/start.sh logger $1 0 $push +} +croncmd(){ + if [ -n "$(crontab -h 2>&1 | grep '\-l')" ];then + crontab $1 + else + crondir="$(crond -h 2>&1 | grep -oE 'Default:.*' | awk -F ":" '{print $2}')" + [ ! -w "$crondir" ] && crondir="/etc/storage/cron/crontabs" + [ ! -w "$crondir" ] && crondir="/var/spool/cron/crontabs" + [ ! -w "$crondir" ] && crondir="/var/spool/cron" + [ ! -w "$crondir" ] && echo "你的设备不支持定时任务配置,脚本大量功能无法启用,请前往 https://t.me/ShellCrash 申请适配!" + [ "$1" = "-l" ] && cat $crondir/$USER 2>/dev/null + [ -f "$1" ] && cat $1 > $crondir/$USER + fi +} +cronset(){ + # 参数1代表要移除的关键字,参数2代表要添加的任务语句 + tmpcron=$TMPDIR/cron_$USER + croncmd -l > $tmpcron + sed -i "/$1/d" $tmpcron + sed -i '/^$/d' $tmpcron + echo "$2" >> $tmpcron + croncmd $tmpcron + rm -f $tmpcron + #华硕/Padavan固件存档在本地,其他则删除 + [ "$CRASHDIR" = "/jffs/clash" -o "$CRASHDIR" = "/etc/storage/clash" ] && mv -f $tmpcron $CRASHDIR/task/cron || rm -f $tmpcron + echo -e "任务:【$1】\033[32m添加成功!\033[0m" +} +set_cron(){ + [ -z $week ] && week=* + [ -z $hour ] && hour=* + [ -z $min ] && min=0 + echo ----------------------------------------------- + echo -e "\033[33m$cron_time\033[0m执行任务:\033[36m$task_name\033[0m" + read -p "是否确认添加定时任务?(1/0) > " res + if [ "$res" = '1' ]; then + task_txt="$min $hour * * $week $CRASHDIR/task/task.sh $task_id $cron_time$task_name" + cronset "$cron_time$task_name" "$task_txt" + fi + unset week hour min + sleep 1 +} +set_service(){ + # 参数1代表要任务类型,参数2代表任务ID,参数3代表任务描述 + task_file=$CRASHDIR/task/$1 + [ -s $task_file ] && sed -i "/$3/d" $task_file + echo "$CRASHDIR/task/task.sh $2 $3" >> $task_file + echo -e "任务:【$3】\033[32m添加成功!\033[0m" + sleep 1 +} +#任务界面 +task_user_add(){ #自定义命令添加 + echo ----------------------------------------------- + echo -e "\033[33m命令可包含空格,请确保命令可执行!\033[0m" + echo -e "也可以手动编辑\033[32m$CRASHDIR/task/task.user\033[0m添加" + read -p "请输入命令语句 > " script + if [ -n "$script" ];then + task_command=$script + echo -e "请检查输入:\033[32m$task_command\033[0m" + #获取本任务ID + task_max_id=$(awk -F'#' '{print $1}' $CRASHDIR/task/task.user | sort -n | tail -n 1) + [ -z "$task_max_id" ] && task_max_id=200 + task_id=$((task_max_id + 1)) + read -p "请输入任务备注 > " txt + [ -n "$txt" ] && task_name=$txt || task_name=自定义任务$task_id + echo "$task_id#$task_command#$task_name" >> $CRASHDIR/task/task.user + echo -e "\033[32m自定义任务已添加!\033[0m" + sleep 1 + else + echo -e "\033[31m输入错误,请重新输入!\033[0m" + sleep 1 + fi +} +task_user_del(){ #自定义命令删除 + echo ----------------------------------------------- + echo -e "请输入对应ID移除对应自定义任务(不会影响内置任务)" + echo -e "也可以手动编辑\033[32m$CRASHDIR/task/task.user\033[0m" + echo ----------------------------------------------- + cat $CRASHDIR/task/task.user 2>/dev/null | grep -Ev '^#' | awk -F '#' '{print $1" "$3}' + echo ----------------------------------------------- + echo 0 返回上级菜单 + echo ----------------------------------------------- + read -p "请输入对应数字 > " num + if [ -n "$num" ];then + sed -i "/^$num#/d" $CRASHDIR/task/task.user 2>/dev/null + [ "$num" != 0 ] && task_user_del + else + echo -e "\033[31m输入错误,请重新输入!\033[0m" + sleep 1 + fi +} +task_add(){ #任务添加 + echo ----------------------------------------------- + echo -e "\033[36m请选择需要添加的任务\033[0m" + echo ----------------------------------------------- + #检测并创建自定义任务文件 + [ -f $CRASHDIR/task/task.user ] || echo '#任务ID(必须>200并顺序排列)#任务命令#任务说明(#号隔开,任务命令和说明中都不允许包含#号)' > $CRASHDIR/task/task.user + #输出任务列表 + cat $CRASHDIR/task/task.list $CRASHDIR/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | awk -F '#' '{print " "NR" "$3}' + echo ----------------------------------------------- + echo -e " 0 返回上级菜单" + read -p "请输入对应数字 > " num + case "$num" in + 0) + ;; + [1-9]|[1-9][0-9]) + if [ "$num" -le "$(cat $CRASHDIR/task/task.list $CRASHDIR/task/task.user 2>/dev/null | wc -l)" ];then + task_id=$(cat $CRASHDIR/task/task.list $CRASHDIR/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $1}') + task_name=$(cat $CRASHDIR/task/task.list $CRASHDIR/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $3}') + task_type + else + errornum + fi + ;; + *) + errornum + ;; + esac +} +task_del(){ #任务删除 + #删除定时任务 + croncmd -l > $TMPDIR/cron && sed -i "/$1/d" $TMPDIR/cron && croncmd $TMPDIR/cron + sed -i "/$1/d" $CRASHDIR/task/cron 2>/dev/null + rm -f $TMPDIR/cron + #删除条件任务 + sed -i "/$1/d" $CRASHDIR/task/bfstart 2>/dev/null + sed -i "/$1/d" $CRASHDIR/task/afstart 2>/dev/null + sed -i "/$1/d" $CRASHDIR/task/affirewall 2>/dev/null +} +task_type(){ #任务条件选择菜单 + echo ----------------------------------------------- + echo -e "请选择任务\033[36m【$task_name】\033[0m执行条件:" + echo ----------------------------------------------- + echo -e " 1 定时任务\033[32m每周执行\033[0m" + echo -e " 2 定时任务\033[32m每日执行\033[0m" + echo -e " 3 定时任务\033[32m每小时执行\033[0m" + echo -e " 4 定时任务\033[32m每分钟执行\033[0m" + echo -e " 5 服务\033[33m启动前执行\033[0m" + echo -e " 6 服务\033[33m启动后执行\033[0m" + echo -e " 7 防火墙服务\033[33m重启后执行\033[0m" + echo ----------------------------------------------- + echo -e " 0 返回上级菜单" + read -p "请输入对应数字 > " num + case "$num" in + + 0) + ;; + 1) + echo ----------------------------------------------- + echo -e " 输入 1~7 对应\033[33m每周的指定某天\033[0m运行" + echo -e " 输入 1,3,6 代表\033[36m每周1,3,6\033[0m运行" + echo -e " 输入 1-5 代表\033[36m周一至周五\033[0m运行" + read -p "请在每周哪天执行? > " week + echo ----------------------------------------------- + read -p "想在该日的具体哪个小时执行?(0-23) > " hour + cron_time="在每周$week的$hour点整" + set_cron + ;; + 2) + echo ----------------------------------------------- + echo -e " 输入 1,7,15 代表\033[36m每到1,7,15点\033[0m运行" + echo -e " 输入 6-18 代表\033[36m早6点至晚18点间每小时\033[0m运行" + read -p "想在每日的具体哪个小时执行?(0-23) > " hour + echo ----------------------------------------------- + read -p "想在具体哪分钟执行?(1-59的整数) > " min + cron_time="在每日的$hour点$min分" + set_cron + ;; + 3) + echo ----------------------------------------------- + read -p "想每隔多少小时执行一次?(1-23的整数) > " num + hour="*/$num" + cron_time="每隔$num小时" + set_cron + ;; + 4) + echo ----------------------------------------------- + read -p "想每隔多少分钟执行一次?(1-59的整数) > " num + min="*/$num" + cron_time="每隔$num分钟" + set_cron + ;; + 5) + set_service bfstart "$task_id" "服务启动前$task_name" + ;; + 6) + set_service afstart "$task_id" "服务启动后$task_name" + ;; + 7) + echo -e "该功能会将相关启动代码注入到/etc/init.d/firewall中" + read -p "是否继续?(1/0) > " res + [ "$res" = 1 ] && set_service affirewall "$task_id" "防火墙重启后$task_name" + ;; + *) + errornum + ;; + esac +} +task_manager(){ #任务管理列表 + echo ----------------------------------------------- + #抽取并生成临时列表 + croncmd -l | grep -oE "$CRASHDIR/task/task.sh .*" | awk -F ' ' '{print $2" "$3}' > $TMPDIR/task_list + cat $CRASHDIR/task/bfstart $CRASHDIR/task/afstart $CRASHDIR/task/affirewall 2>/dev/null | awk -F ' ' '{print $2" "$3}' >> $TMPDIR/task_list + #判断为空则返回 + if [ ! -s $TMPDIR/task_list ];then + echo -e "\033[31m当前没有可供管理的任务!\033[36m" + sleep 1 + else + echo -e "\033[33m已添加的任务:\033[0m" + echo ----------------------------------------------- + cat $TMPDIR/task_list | awk '{print " " NR " " $2}' + echo ----------------------------------------------- + echo -e " d 清空任务列表" + echo -e " 0 返回上级菜单" + read -p "请输入对应数字 > " num + case "$num" in + 0) + ;; + d) + task_del "$CRASHDIR\/task\/task.sh" + echo -e "\033[31m全部任务已清空!\033[36m" + sleep 1 + ;; + [1-9]|[1-9][0-9]) + + task_txt=$(sed -n "$num p" $TMPDIR/task_list) + task_id=$(echo $task_txt | awk '{print $1}') + task_des=$(echo $task_txt | awk '{print $2}') + task_name=$(cat $CRASHDIR/task/task.list $CRASHDIR/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}') + echo ----------------------------------------------- + echo -e "当前任务为:\033[36m $task_des\033[0m" + echo -e " 1 \033[33m修改\033[0m当前任务" + echo -e " 2 \033[31m删除\033[0m当前任务" + echo -e " 3 \033[32m立即执行\033[0m一次" + echo -e " 4 查看\033[33m执行记录\033[0m" + echo ----------------------------------------------- + echo -e " 0 返回上级菜单" + read -p "请选择需要执行的操作 > " num + case "$num" in + 0) + ;; + 1) + task_type && task_del $task_des + ;; + 2) + task_del $task_des + ;; + 3) + task_command=$(cat $CRASHDIR/task/task.list $CRASHDIR/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}') + eval $task_command && task_res='执行成功!' || task_res='执行失败!' + logger "任务:【$task_des】$task_res" 33 off + sleep 1 + ;; + 4) + echo ----------------------------------------------- + if [ -n "$(cat $TMPDIR/ShellCrash.log | grep "$task_name")" ];then + cat $TMPDIR/ShellCrash.log | grep "$task_name" + else + echo -e "\033[31m未找到相关执行记录!\033[0m" + fi + sleep 1 + ;; + *) + errornum + ;; + esac + + task_manager + ;; + *) + errornum + ;; + esac + fi +} +task_recom(){ #任务推荐 + echo ----------------------------------------------- + echo -e "\033[32m启用推荐的自动任务配置?这包括:\033[0m" + echo ----------------------------------------------- + echo -e "每隔10分钟自动保存面板配置" + echo -e "服务启动后自动同步ntp时间" + echo -e "在每周3的3点整更新订阅并重启服务" + echo ----------------------------------------------- + read -p "是否启用?(1/0) > " res + [ "$res" = 1 ] && { + cronset "每隔10分钟自动保存面板配置" "*/10 * * * * $CRASHDIR/task/task.sh 106 每隔10分钟自动保存面板配置" + cronset "在每周3的3点整更新订阅并重启服务" "0 3 * * 3 /data/clash/task/task.sh 104 在每周3的3点整更新订阅并重启服务" + set_service afstart "107" "服务启动后自动同步ntp时间" + } +} +task_menu(){ #任务菜单 + echo ----------------------------------------------- + echo -e "\033[30;47m欢迎使用自动任务功能:\033[0m" + echo ----------------------------------------------- + echo -e " 1 添加\033[32m自动任务\033[0m" + echo -e " 2 管理\033[33m任务列表\033[0m" + echo -e " 3 查看\033[36m任务日志\033[0m" + echo -e " 4 配置\033[36m日志推送\033[0m" + echo -e " 5 添加\033[33m自定义任务\033[0m" + echo -e " 6 删除\033[33m自定义任务\033[0m" + echo -e " 7 使用\033[32m推荐设置\033[0m" + echo ----------------------------------------------- + echo -e " 0 返回上级菜单" + read -p "请输入对应数字 > " num + case "$num" in + 0) + ;; + 1) + task_add + task_menu + ;; + 2) + task_manager + rm -rf $TMPDIR/task_list + task_menu + ;; + 3) + echo ----------------------------------------------- + cat $TMPDIR/ShellCrash.log | grep '任务:' + task_menu + ;; + 4) + echo ----------------------------------------------- + echo -e "\033[36m请在日志工具中配置相关推送通道及推送开关\033[0m" + log_pusher + task_menu + ;; + 5) + task_user_add + task_menu + ;; + 6) + task_user_del + task_menu + ;; + 7) + task_recom + task_menu + ;; + *) + errornum + ;; + + esac + +} + +case "$1" in + menu) + task_menu + ;; + [1-9][0-9][0-9]) + task_command=$(cat $CRASHDIR/task/task.list $CRASHDIR/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $2}') + task_name=$(cat $CRASHDIR/task/task.list $CRASHDIR/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $3}') + #logger "任务:$task_name 开始执行" + eval $task_command && task_res=成功 || task_res=失败 + logger "任务【$2】执行$task_res" + ;; + *) + $1 + ;; +esac +