mirror of
https://github.com/juewuy/ShellCrash.git
synced 2026-03-10 23:41:22 +00:00
~脚本进行大量拆分和优化
This commit is contained in:
@@ -28,16 +28,7 @@ start_core() {
|
||||
elif [ -s $core_config -o -n "$Url" -o -n "$Https" ]; then
|
||||
"$CRASHDIR"/start.sh start
|
||||
#设置循环检测以判定服务启动是否成功
|
||||
i=1
|
||||
while [ -z "$test" -a "$i" -lt 30 ]; do
|
||||
sleep 1
|
||||
if curl --version >/dev/null 2>&1; then
|
||||
test=$(curl -s -H "Authorization: Bearer $secret" http://127.0.0.1:${db_port}/configs | grep -o port)
|
||||
else
|
||||
test=$(wget -q --header="Authorization: Bearer $secret" -O - http://127.0.0.1:${db_port}/configs | grep -o port)
|
||||
fi
|
||||
i=$((i + 1))
|
||||
done
|
||||
. "$CRASHDIR"/libs/start_wait.sh
|
||||
[ -n "$test" -o -n "$(pidof CrashCore)" ] && startover
|
||||
else
|
||||
echo -e "\033[31m没有找到${crashcore}配置文件,请先导入配置文件!\033[0m"
|
||||
|
||||
@@ -5,6 +5,7 @@ settings() { #功能设置
|
||||
#获取设置默认显示
|
||||
[ -z "$skip_cert" ] && skip_cert=已开启
|
||||
[ -z "$sniffer" ] && sniffer=未启用
|
||||
[ -z "$dns_mod" ] && dns_mod='redir_host'
|
||||
#
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;47m欢迎使用功能设置菜单:\033[0m"
|
||||
@@ -38,7 +39,7 @@ settings() { #功能设置
|
||||
settings
|
||||
;;
|
||||
2)
|
||||
set_dns_mod
|
||||
. "$CRASHDIR"/menus/dns.sh && set_dns_mod
|
||||
sleep 1
|
||||
settings
|
||||
;;
|
||||
@@ -278,69 +279,6 @@ set_redir_mod() { #代理模式设置
|
||||
;;
|
||||
esac
|
||||
}
|
||||
set_dns_mod() { #DNS模式设置
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "当前DNS运行模式为:\033[47;30m $dns_mod \033[0m"
|
||||
echo -e "\033[33m切换模式后需要手动重启服务以生效!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 fake-ip模式: 响应快,\033[33m兼容性较差\033[0m"
|
||||
echo -e " 不支持CN-IP绕过功能"
|
||||
echo -e " 2 redir_host模式:\033[33m不安全,易被污染\033[0m"
|
||||
echo -e " 建议搭配第三方DNS服务使用"
|
||||
if echo "$crashcore" | grep -q 'singbox' || [ "$crashcore" = meta ]; then
|
||||
echo -e " 3 mix混合模式: \033[32m防污染防泄露,响应快,推荐!\033[0m"
|
||||
echo -e " cn域名realip其他fakeip分流"
|
||||
echo -e " 4 route模式: \033[32m防污染防泄露,全真实IP\033[0m"
|
||||
echo -e " cn域名realip其他dns2proxy分流"
|
||||
fi
|
||||
echo -e " 9 \033[36mDNS进阶设置\033[0m"
|
||||
echo " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
0) ;;
|
||||
1)
|
||||
dns_mod=fake-ip
|
||||
setconfig dns_mod $dns_mod
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m已设为 $dns_mod 模式!!\033[0m"
|
||||
;;
|
||||
2)
|
||||
dns_mod=redir_host
|
||||
setconfig dns_mod $dns_mod
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m已设为 $dns_mod 模式!!\033[0m"
|
||||
;;
|
||||
3)
|
||||
if echo "$crashcore" | grep -q 'singbox' || [ "$crashcore" = meta ]; then
|
||||
dns_mod=mix
|
||||
setconfig dns_mod $dns_mod
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m已设为 $dns_mod 模式!!\033[0m"
|
||||
else
|
||||
echo -e "\033[31m当前内核不支持的功能!!!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
;;
|
||||
4)
|
||||
if echo "$crashcore" | grep -q 'singbox' || [ "$crashcore" = meta ]; then
|
||||
dns_mod=route
|
||||
setconfig dns_mod $dns_mod
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m已设为 $dns_mod 模式!!\033[0m"
|
||||
else
|
||||
echo -e "\033[31m当前内核不支持的功能!!!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
;;
|
||||
9)
|
||||
setdns
|
||||
set_dns_mod
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
}
|
||||
set_fw_filter(){ #流量过滤
|
||||
[ -z "$common_ports" ] && common_ports=已开启
|
||||
[ -z "$quic_rj" ] && quic_rj=未开启
|
||||
@@ -830,7 +768,7 @@ set_adv_config() { #端口设置
|
||||
set_firewall_area() { #代理范围设置
|
||||
[ -z "$vm_redir" ] && vm_redir='未开启'
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m注意:\033[0m基于桥接网卡的Docker/虚拟机流量,请单独启用6!"
|
||||
echo -e "\033[31m注意:\033[0m基于桥接网卡的Docker/虚拟机流量,请单独启用!"
|
||||
echo -e "\033[33m如你使用了第三方DNS如smartdns等,请勿启用本机代理或使用shellcrash用户执行!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 \033[32m仅代理局域网流量\033[0m"
|
||||
|
||||
@@ -1,196 +1,10 @@
|
||||
#!/bin/ash
|
||||
# Copyright (C) Juewuy
|
||||
|
||||
#加载全局变量
|
||||
[ -z "$CRASHDIR" ] && CRASHDIR=$(cd "$(dirname "$(dirname "$0")")"; pwd)
|
||||
[ -z "$BINDIR" ] && BINDIR=${CRASHDIR}
|
||||
CFG_PATH=${CRASHDIR}/configs/ShellCrash.cfg
|
||||
TMPDIR=/tmp/ShellCrash && [ ! -f ${TMPDIR} ] && mkdir -p ${TMPDIR}
|
||||
. $CFG_PATH >/dev/null 2>&1
|
||||
[ -n "$(tar --help 2>&1|grep -o 'no-same-owner')" ] && tar_para='--no-same-owner' #tar命令兼容
|
||||
|
||||
setconfig(){
|
||||
#参数1代表变量名,参数2代表变量值,参数3即文件路径
|
||||
[ -z "$3" ] && configpath=$CFG_PATH || configpath=$3
|
||||
[ -n "$(grep "\b${1}=" $configpath)" ] && sed -i "s#\b${1}=.*#${1}=${2}#g" $configpath || echo "${1}=${2}" >> $configpath
|
||||
}
|
||||
ckcmd(){ #检查命令是否存在
|
||||
command -v sh >/dev/null 2>&1 && command -v $1 >/dev/null 2>&1 || type $1 >/dev/null 2>&1
|
||||
}
|
||||
|
||||
#任务命令
|
||||
check_update(){ #检查更新工具
|
||||
${CRASHDIR}/start.sh get_bin ${TMPDIR}/crashversion "$1" echooff
|
||||
[ "$?" = "0" ] && . ${TMPDIR}/crashversion 2>/dev/null
|
||||
rm -rf ${TMPDIR}/crashversion
|
||||
}
|
||||
update_core(){ #自动更新内核
|
||||
#检查版本
|
||||
check_update bin/version
|
||||
crash_v_new=$(eval echo \$${crashcore}_v)
|
||||
if [ -z "$crash_v_new" -o "$crash_v_new" = "$core_v" ];then
|
||||
logger "任务【自动更新内核】中止-未检测到版本更新"
|
||||
exit 1
|
||||
else
|
||||
echo "$crashcore" | grep -q 'singbox' && core_new=singbox || core_new=clash
|
||||
if [ -n "$custcorelink" ];then
|
||||
zip_type=$(echo $custcorelink | grep -oE 'tar.gz$')
|
||||
[ -z "$zip_type" ] && zip_type=$(echo $custcorelink | grep -oE 'gz$')
|
||||
if [ -n "$zip_type" ];then
|
||||
${CRASHDIR}/start.sh webget ${TMPDIR}/core_new.${zip_type} ${custcorelink}
|
||||
fi
|
||||
else
|
||||
${CRASHDIR}/start.sh get_bin ${TMPDIR}/core_new.tar.gz bin/${crashcore}/${core_new}-linux-${cpucore}.tar.gz
|
||||
fi
|
||||
if [ "$?" != "0" ];then
|
||||
logger "任务【自动更新内核】出错-下载失败!"
|
||||
${TMPDIR}/CrashCore.tar.gz
|
||||
return 1
|
||||
else
|
||||
[ -n "$(pidof CrashCore)" ] && ${CRASHDIR}/start.sh stop #停止内核服务防止内存不足
|
||||
[ -f ${TMPDIR}/core_new.tar.gz ] && {
|
||||
mkdir -p ${TMPDIR}/core_new_dir
|
||||
[ "$BINDIR" = "$TMPDIR" ] && rm -rf ${TMPDIR}/CrashCore #小闪存模式防止空间不足
|
||||
tar -zxf "${TMPDIR}/core_new.tar.gz" ${tar_para} -C ${TMPDIR}/core_new_dir/
|
||||
for file in $(find ${TMPDIR}/core_new_dir 2>/dev/null);do
|
||||
[ -f $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|premium)')" ] && mv -f $file ${TMPDIR}/core_new
|
||||
done
|
||||
rm -rf ${TMPDIR}/core_new_dir
|
||||
}
|
||||
[ -f ${TMPDIR}/core_new.gz ] && gunzip ${TMPDIR}/core_new.gz >/dev/null && rm -rf ${TMPDIR}/core_new.gz
|
||||
chmod +x ${TMPDIR}/core_new
|
||||
[ "$crashcore" = unknow ] && setcoretype
|
||||
if echo "$crashcore" | grep -q 'singbox';then
|
||||
core_v=$(${TMPDIR}/core_new version 2>/dev/null | grep version | awk '{print $3}')
|
||||
else
|
||||
core_v=$(${TMPDIR}/core_new -v 2>/dev/null | head -n 1 | sed 's/ linux.*//;s/.* //')
|
||||
fi
|
||||
if [ -z "$core_v" ];then
|
||||
logger "任务【自动更新内核】出错-内核校验失败!"
|
||||
rm -rf ${TMPDIR}/core_new.tar.gz
|
||||
rm -rf ${TMPDIR}/core_new
|
||||
${CRASHDIR}/start.sh start
|
||||
return 1
|
||||
else
|
||||
mv -f ${TMPDIR}/core_new ${TMPDIR}/CrashCore
|
||||
if [ -f ${TMPDIR}/core_new.tar.gz ];then
|
||||
mv -f ${TMPDIR}/core_new.tar.gz ${BINDIR}/CrashCore.tar.gz
|
||||
else
|
||||
tar -zcf ${BINDIR}/CrashCore.tar.gz ${tar_para} -C ${TMPDIR} CrashCore
|
||||
fi
|
||||
logger "任务【自动更新内核】下载完成,正在重启服务!"
|
||||
setconfig core_v $core_v
|
||||
${CRASHDIR}/start.sh start
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
update_scripts(){ #自动更新脚本
|
||||
#检查版本
|
||||
check_update version
|
||||
if [ -z "$versionsh" -o "$versionsh" = "versionsh_l" ];then
|
||||
logger "任务【自动更新脚本】中止-未检测到版本更新"
|
||||
exit 1
|
||||
else
|
||||
${CRASHDIR}/start.sh get_bin ${TMPDIR}/clashfm.tar.gz "bin/update.tar.gz"
|
||||
if [ "$?" != "0" ];then
|
||||
rm -rf ${TMPDIR}/clashfm.tar.gz
|
||||
logger "任务【自动更新内核】出错-下载失败!"
|
||||
return 1
|
||||
else
|
||||
#停止服务
|
||||
${CRASHDIR}/start.sh stop
|
||||
#解压
|
||||
tar -zxf "${TMPDIR}/clashfm.tar.gz" ${tar_para} -C ${CRASHDIR}/
|
||||
if [ $? -ne 0 ];then
|
||||
rm -rf ${TMPDIR}/clashfm.tar.gz
|
||||
logger "任务【自动更新内核】出错-解压失败!"
|
||||
${CRASHDIR}/start.sh start
|
||||
return 1
|
||||
else
|
||||
. ${CRASHDIR}/init.sh >/dev/null
|
||||
${CRASHDIR}/start.sh start
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
update_mmdb(){ #自动更新数据库
|
||||
getgeo(){
|
||||
#检查版本
|
||||
check_update bin/version
|
||||
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 get_bin ${TMPDIR}/$1 "bin/geodata/$2"
|
||||
if [ "$?" != "0" ];then
|
||||
logger "任务【自动更新数据库文件】更新【$2】下载失败!"
|
||||
rm -rf ${TMPDIR}/$1
|
||||
else
|
||||
mv -f ${TMPDIR}/$1 ${BINDIR}/$1
|
||||
setconfig $geo_v $GeoIP_v
|
||||
logger "任务【自动更新数据库文件】更新【$2】成功!"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
[ -n "${cn_mini_v}" -a -s $CRASHDIR/Country.mmdb ] && getgeo Country.mmdb cn_mini.mmdb
|
||||
[ -n "${china_ip_list_v}" -a -s $CRASHDIR/cn_ip.txt ] && getgeo cn_ip.txt china_ip_list.txt
|
||||
[ -n "${china_ipv6_list_v}" -a -s $CRASHDIR/cn_ipv6.txt ] && getgeo cn_ipv6.txt china_ipv6_list.txt
|
||||
[ -n "${geosite_v}" -a -s $CRASHDIR/GeoSite.dat ] && getgeo GeoSite.dat geosite.dat
|
||||
[ -n "${geoip_cn_v}" -a -s $CRASHDIR/geoip.db ] && getgeo geoip.db geoip_cn.db
|
||||
[ -n "${geosite_cn_v}" -a -s $CRASHDIR/geosite.db ] && getgeo geosite.db geosite_cn.db
|
||||
[ -n "${mrs_geosite_cn_v}" -a -s $CRASHDIR/geosite-cn.mrs ] && getgeo geosite-cn.mrs mrs_geosite_cn.mrs
|
||||
[ -n "${srs_geoip_cn_v}" -a -s $CRASHDIR/geoip-cn.srs ] && getgeo geoip-cn.srs srs_geoip_cn.srs
|
||||
[ -n "${srs_geosite_cn_v}" -a -s $CRASHDIR/geosite-cn.srs ] && getgeo geosite-cn.srs srs_geosite_cn.srs
|
||||
return 0
|
||||
}
|
||||
reset_firewall(){ #重设透明路由防火墙
|
||||
${CRASHDIR}/start.sh stop_firewall
|
||||
${CRASHDIR}/start.sh afstart
|
||||
}
|
||||
ntp(){
|
||||
[ "$crashcore" != singbox ] && ckcmd ntpd && ntpd -n -q -p 203.107.6.88 >/dev/null 2>&1 || exit 0 &
|
||||
}
|
||||
#通用工具
|
||||
. "$CRASHDIR"/libs/set_config.sh
|
||||
. "$CRASHDIR"/libs/set_cron.sh
|
||||
#任务工具
|
||||
logger(){
|
||||
[ "$task_push" = 1 ] && push= || push=off
|
||||
[ -n "$2" -a "$2" != 0 ] && echo -e "\033[$2m$1\033[0m"
|
||||
[ "$3" = 'off' ] && push=off
|
||||
echo "$1" |grep -qE '(每隔|时每)([1-9]|[1-9][0-9])分钟' && 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"
|
||||
if [ -w "$crondir" ];then
|
||||
[ "$1" = "-l" ] && cat $crondir/$USER 2>/dev/null
|
||||
[ -f "$1" ] && cat $1 > $crondir/$USER
|
||||
else
|
||||
echo "你的设备不支持定时任务配置,脚本大量功能无法启用,请尝试使用搜索引擎查找安装方式!"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
cronset(){
|
||||
# 参数1代表要移除的关键字,参数2代表要添加的任务语句
|
||||
tmpcron=${TMPDIR}/cron_$USER
|
||||
croncmd -l > $tmpcron 2>/dev/null
|
||||
sed -i "/$1/d" $tmpcron
|
||||
sed -i '/^$/d' $tmpcron
|
||||
echo "$2" >> $tmpcron
|
||||
croncmd $tmpcron
|
||||
#华硕/Padavan固件存档在本地,其他则删除
|
||||
[ -d /jffs -o -d /etc/storage/clash -o -d /etc/storage/ShellCrash ] && mv -f $tmpcron ${CRASHDIR}/task/cron || rm -f $tmpcron
|
||||
}
|
||||
set_cron(){
|
||||
[ -z $week ] && week=*
|
||||
[ -z $hour ] && hour=*
|
||||
@@ -208,7 +22,7 @@ set_cron(){
|
||||
}
|
||||
set_service(){
|
||||
# 参数1代表要任务类型,参数2代表任务ID,参数3代表任务描述,参数4代表running任务cron时间
|
||||
task_file=${CRASHDIR}/task/$1
|
||||
task_file="$CRASHDIR"/task/$1
|
||||
[ -s $task_file ] && sed -i "/$3/d" $task_file
|
||||
#运行时每分钟执行的任务特殊处理
|
||||
if [ "$1" = "running" ];then
|
||||
@@ -232,12 +46,12 @@ task_user_add(){ #自定义命令添加
|
||||
task_command=$script
|
||||
echo -e "请检查输入:\033[32m$task_command\033[0m"
|
||||
#获取本任务ID
|
||||
task_max_id=$(awk -F '#' '{print $1}' ${CRASHDIR}/task/task.user 2>/dev/null | sort -n | tail -n 1)
|
||||
task_max_id=$(awk -F '#' '{print $1}' "$CRASHDIR"/task/task.user 2>/dev/null | 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 "$task_id#$task_command#$task_name" >> "$CRASHDIR"/task/task.user
|
||||
echo -e "\033[32m自定义任务已添加!\033[0m"
|
||||
sleep 1
|
||||
else
|
||||
@@ -250,13 +64,13 @@ task_user_del(){ #自定义命令删除
|
||||
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}'
|
||||
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
|
||||
sed -i "/^$num#/d" "$CRASHDIR"/task/task.user 2>/dev/null
|
||||
[ "$num" != 0 ] && task_user_del
|
||||
else
|
||||
echo -e "\033[31m输入错误,请重新输入!\033[0m"
|
||||
@@ -268,7 +82,7 @@ task_add(){ #任务添加
|
||||
echo -e "\033[36m请选择需要添加的任务\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
#输出任务列表
|
||||
cat ${CRASHDIR}/task/task.list ${CRASHDIR}/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | awk -F '#' '{print " "NR" "$3}'
|
||||
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
|
||||
@@ -276,9 +90,9 @@ task_add(){ #任务添加
|
||||
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}')
|
||||
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
|
||||
@@ -291,14 +105,14 @@ task_add(){ #任务添加
|
||||
}
|
||||
task_del(){ #任务删除
|
||||
#删除定时任务
|
||||
croncmd -l > ${TMPDIR}/cron && sed -i "/$1/d" ${TMPDIR}/cron && croncmd ${TMPDIR}/cron
|
||||
rm -f ${TMPDIR}/cron
|
||||
croncmd -l > "$TMPDIR"/cron && sed -i "/$1/d" "$TMPDIR"/cron && croncmd "$TMPDIR"/cron
|
||||
rm -f "$TMPDIR"/cron
|
||||
#删除条件任务
|
||||
sed -i "/$1/d" ${CRASHDIR}/task/cron 2>/dev/null
|
||||
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/running 2>/dev/null
|
||||
sed -i "/$1/d" ${CRASHDIR}/task/affirewall 2>/dev/null
|
||||
sed -i "/$1/d" "$CRASHDIR"/task/cron 2>/dev/null
|
||||
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/running 2>/dev/null
|
||||
sed -i "/$1/d" "$CRASHDIR"/task/affirewall 2>/dev/null
|
||||
}
|
||||
task_type(){ #任务条件选择菜单
|
||||
echo "-----------------------------------------------"
|
||||
@@ -393,20 +207,20 @@ task_type(){ #任务条件选择菜单
|
||||
task_manager(){ #任务管理列表
|
||||
echo "-----------------------------------------------"
|
||||
#抽取并生成临时列表
|
||||
croncmd -l > ${TMPDIR}/task_cronlist
|
||||
cat ${TMPDIR}/task_cronlist ${CRASHDIR}/task/running 2>/dev/null | sort -u | grep -oE "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
|
||||
cat ${TMPDIR}/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "守护" | awk -F '#' '{print "0 旧版任务-"$2}' >> ${TMPDIR}/task_list
|
||||
sed -i '/^ *$/d' ${TMPDIR}/task_list
|
||||
rm -rf ${TMPDIR}/task_cronlist
|
||||
croncmd -l > "$TMPDIR"/task_cronlist
|
||||
cat "$TMPDIR"/task_cronlist "$CRASHDIR"/task/running 2>/dev/null | sort -u | grep -oE "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
|
||||
cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "守护" | awk -F '#' '{print "0 旧版任务-"$2}' >> "$TMPDIR"/task_list
|
||||
sed -i '/^ *$/d' "$TMPDIR"/task_list
|
||||
rm -rf "$TMPDIR"/task_cronlist
|
||||
#判断为空则返回
|
||||
if [ ! -s ${TMPDIR}/task_list ];then
|
||||
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}'
|
||||
cat "$TMPDIR"/task_list | awk '{print " " NR " " $2}'
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " a 清空旧版任务"
|
||||
echo -e " d 清空任务列表"
|
||||
@@ -427,7 +241,7 @@ task_manager(){ #任务管理列表
|
||||
;;
|
||||
[1-9]|[1-9][0-9])
|
||||
|
||||
task_txt=$(sed -n "$num p" ${TMPDIR}/task_list)
|
||||
task_txt=$(sed -n "$num p" "$TMPDIR"/task_list)
|
||||
task_id=$(echo $task_txt | awk '{print $1}')
|
||||
if [ "$task_id" = 0 ];then
|
||||
read -p "旧版任务不支持管理,是否移除?(1/0) > " res
|
||||
@@ -439,7 +253,7 @@ task_manager(){ #任务管理列表
|
||||
}
|
||||
else
|
||||
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}')
|
||||
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当前任务"
|
||||
@@ -459,15 +273,15 @@ task_manager(){ #任务管理列表
|
||||
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}')
|
||||
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
|
||||
echo -e "\033[33m任务【$task_des】$task_res\033[0m"
|
||||
sleep 1
|
||||
;;
|
||||
4)
|
||||
echo "-----------------------------------------------"
|
||||
if [ -n "$(cat ${TMPDIR}/ShellCrash.log | grep "$task_name")" ];then
|
||||
cat ${TMPDIR}/ShellCrash.log | grep "$task_name"
|
||||
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
|
||||
@@ -504,7 +318,7 @@ task_recom(){ #任务推荐
|
||||
}
|
||||
task_menu(){ #任务菜单
|
||||
#检测并创建自定义任务文件
|
||||
[ -f ${CRASHDIR}/task/task.user ] || echo '#任务ID(必须>200并顺序排列)#任务命令#任务说明(#号隔开,任务命令和说明中都不允许包含#号)' > ${CRASHDIR}/task/task.user
|
||||
[ -f "$CRASHDIR"/task/task.user ] || echo '#任务ID(必须>200并顺序排列)#任务命令#任务说明(#号隔开,任务命令和说明中都不允许包含#号)' > "$CRASHDIR"/task/task.user
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;47m欢迎使用自动任务功能:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
@@ -527,13 +341,13 @@ task_menu(){ #任务菜单
|
||||
;;
|
||||
2)
|
||||
task_manager
|
||||
rm -rf ${TMPDIR}/task_list
|
||||
rm -rf "$TMPDIR"/task_list
|
||||
task_menu
|
||||
;;
|
||||
3)
|
||||
if [ -n "$(cat ${TMPDIR}/ShellCrash.log | grep '任务【')" ];then
|
||||
if [ -n "$(cat "$TMPDIR"/ShellCrash.log | grep '任务【')" ];then
|
||||
echo "-----------------------------------------------"
|
||||
cat ${TMPDIR}/ShellCrash.log | grep '任务【'
|
||||
cat "$TMPDIR"/ShellCrash.log | grep '任务【'
|
||||
else
|
||||
echo -e "\033[31m未找到任务相关执行日志!\033[0m"
|
||||
fi
|
||||
@@ -543,7 +357,7 @@ task_menu(){ #任务菜单
|
||||
4)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m请在日志工具中配置相关推送通道及推送开关\033[0m"
|
||||
log_pusher
|
||||
. "$CRASHDIR"/menus/8_tools.sh && log_pusher
|
||||
task_menu
|
||||
;;
|
||||
5)
|
||||
@@ -563,21 +377,4 @@ task_menu(){ #任务菜单
|
||||
;;
|
||||
|
||||
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
|
||||
|
||||
@@ -412,7 +412,7 @@ EOF
|
||||
cut -c 1- ${TMPDIR}/providers/providers.yaml ${TMPDIR}/providers/proxy-groups.yaml ${TMPDIR}/providers/rules.yaml > ${TMPDIR}/config.yaml
|
||||
rm -rf ${TMPDIR}/providers
|
||||
#调用内核测试
|
||||
${CRASHDIR}/start.sh core_check && ${TMPDIR}/CrashCore -t -d ${BINDIR} -f ${TMPDIR}/config.yaml
|
||||
. "$CRASHDIR"/libs/core_webget.sh && core_find && ${TMPDIR}/CrashCore -t -d ${BINDIR} -f ${TMPDIR}/config.yaml
|
||||
if [ "$?" = 0 ];then
|
||||
echo -e "\033[32m配置文件生成成功!\033[0m"
|
||||
mkdir -p ${CRASHDIR}/yamls
|
||||
@@ -514,7 +514,7 @@ EOF
|
||||
cat ${TMPDIR}/provider_temp_file | sed "s/{providers_tags}/$providers_tags/g" > ${TMPDIR}/providers/outbounds.json
|
||||
rm -rf ${TMPDIR}/provider_temp_file
|
||||
#调用内核测试
|
||||
${CRASHDIR}/start.sh core_check && ${TMPDIR}/CrashCore merge ${TMPDIR}/config.json -C ${TMPDIR}/providers
|
||||
. "$CRASHDIR"/libs/core_webget.sh && core_find && ${TMPDIR}/CrashCore merge ${TMPDIR}/config.json -C ${TMPDIR}/providers
|
||||
if [ "$?" = 0 ];then
|
||||
echo -e "\033[32m配置文件生成成功!如果启动超时建议更新里手动安装Singbox-srs数据库常用包!\033[0m"
|
||||
mkdir -p ${CRASHDIR}/jsons
|
||||
@@ -895,8 +895,8 @@ gen_link_ele(){ #在线生成节点筛选
|
||||
fi
|
||||
setconfig include "'$include'"
|
||||
}
|
||||
get_core_config(){ #调用工具下载
|
||||
${CRASHDIR}/start.sh get_core_config
|
||||
jump_core_config(){ #调用工具下载
|
||||
. "$CRASHDIR"/starts/core_config.sh && get_core_config
|
||||
if [ "$?" = 0 ];then
|
||||
if [ "$inuserguide" != 1 ];then
|
||||
read -p "是否启动服务以使配置文件生效?(1/0) > " res
|
||||
@@ -949,7 +949,7 @@ gen_core_config_link(){ #在线生成工具
|
||||
setconfig Https
|
||||
setconfig Url "'$Url_link'"
|
||||
#获取在线yaml文件
|
||||
get_core_config
|
||||
jump_core_config
|
||||
else
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m请先输入订阅或分享链接!\033[0m"
|
||||
@@ -1004,7 +1004,7 @@ set_core_config_link(){ #直接导入配置
|
||||
setconfig Https "'$link'"
|
||||
setconfig Url
|
||||
#获取在线yaml文件
|
||||
get_core_config
|
||||
jump_core_config
|
||||
else
|
||||
set_core_config_link
|
||||
fi
|
||||
@@ -1117,7 +1117,7 @@ set_core_config(){ #配置文件功能
|
||||
echo "-----------------------------------------------"
|
||||
read -p "确认更新配置文件?[1/0] > " res
|
||||
if [ "$res" = '1' ]; then
|
||||
get_core_config
|
||||
jump_core_config
|
||||
else
|
||||
set_core_config
|
||||
fi
|
||||
|
||||
@@ -276,7 +276,7 @@ log_pusher() {
|
||||
chat=$(wget -Y on -q -O - $url_tg)
|
||||
fi
|
||||
[ -n "$chat" ] && chat_ID=$(echo $chat | sed 's/"update_id":/{\n"update_id":/g' | grep "$public_key" | head -n1 | grep -oE '"id":.*,"is_bot' | sed s'/"id"://' | sed s'/,"is_bot//')
|
||||
[ -z "$chat_ID" ] && {
|
||||
[ -z "$chat_ID" ] && [ "$TOKEN" != 'publictoken' ] && {
|
||||
echo -e "\033[31m无法获取对话ID,请返回重新设置或手动输入ChatID!\033[0m"
|
||||
echo -e "通常访问 \033[32;4m$url_tg\033[0m \n\033[36m即可看到ChatID\033[0m"
|
||||
read -p "请手动输入ChatID > " chat_ID
|
||||
@@ -695,8 +695,8 @@ debug(){
|
||||
main_menu
|
||||
;;
|
||||
9)
|
||||
"$CRASHDIR"/start.sh core_check && "$TMPDIR"/CrashCore merge "$TMPDIR"/debug.json -C "$TMPDIR"/jsons && echo -e "\033[32m合并成功!\033[0m"
|
||||
rm -rf "$TMPDIR"/CrashCore
|
||||
. "$CRASHDIR"/libs/core_webget.sh && core_find && "$TMPDIR"/CrashCore merge "$TMPDIR"/debug.json -C "$TMPDIR"/jsons && echo -e "\033[32m合并成功!\033[0m"
|
||||
[ "$TMPDIR" = "$BINDIR" ] && rm -rf "$TMPDIR"/CrashCore
|
||||
main_menu
|
||||
;;
|
||||
*)
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
# Copyright (C) Juewuy
|
||||
|
||||
. "$CRASHDIR"/libs/check_dir_avail.sh
|
||||
. "$CRASHDIR"/libs/check_cpucore.sh
|
||||
. "$CRASHDIR"/libs/web_get_bin.sh
|
||||
|
||||
error_down(){
|
||||
echo -e "\033[33m请尝试切换至其他安装源后重新下载!\033[0m"
|
||||
@@ -103,10 +105,10 @@ upgrade(){
|
||||
}
|
||||
#检查更新
|
||||
checkupdate(){
|
||||
"$CRASHDIR"/start.sh get_bin "$TMPDIR"/version_new version echooff
|
||||
get_bin "$TMPDIR"/version_new version echooff
|
||||
[ "$?" = "0" ] && {
|
||||
version_new=$(cat "$TMPDIR"/version_new)
|
||||
"$CRASHDIR"/start.sh get_bin "$TMPDIR"/version_new bin/version echooff
|
||||
get_bin "$TMPDIR"/version_new bin/version echooff
|
||||
}
|
||||
if [ "$?" = "0" ];then
|
||||
. "$TMPDIR"/version_new 2>/dev/null
|
||||
@@ -119,7 +121,7 @@ checkupdate(){
|
||||
}
|
||||
#更新脚本
|
||||
getscripts(){
|
||||
"$CRASHDIR"/start.sh get_bin "$TMPDIR"/ShellCrash.tar.gz ShellCrash.tar.gz
|
||||
get_bin "$TMPDIR"/ShellCrash.tar.gz ShellCrash.tar.gz
|
||||
if [ "$?" != "0" ];then
|
||||
echo -e "\033[33m文件下载失败!\033[0m"
|
||||
error_down
|
||||
@@ -159,19 +161,6 @@ setscripts(){
|
||||
fi
|
||||
}
|
||||
#更新内核
|
||||
getcpucore(){ #自动获取内核架构
|
||||
cputype=$(uname -ms | tr ' ' '_' | tr '[A-Z]' '[a-z]')
|
||||
[ -n "$(echo $cputype | grep -E "linux.*armv.*")" ] && cpucore="armv5"
|
||||
[ -n "$(echo $cputype | grep -E "linux.*armv7.*")" ] && [ -n "$(cat /proc/cpuinfo | grep vfp)" ] && [ ! -d /jffs ] && cpucore="armv7"
|
||||
[ -n "$(echo $cputype | grep -E "linux.*aarch64.*|linux.*armv8.*")" ] && cpucore="arm64"
|
||||
[ -n "$(echo $cputype | grep -E "linux.*86.*")" ] && cpucore="386"
|
||||
[ -n "$(echo $cputype | grep -E "linux.*86_64.*")" ] && cpucore="amd64"
|
||||
if [ -n "$(echo $cputype | grep -E "linux.*mips.*")" ];then
|
||||
mipstype=$(echo -n I | hexdump -o 2>/dev/null | awk '{ print substr($2,6,1); exit}') #通过判断大小端判断mips或mipsle
|
||||
[ "$mipstype" = "0" ] && cpucore="mips-softfloat" || cpucore="mipsle-softfloat"
|
||||
fi
|
||||
[ -n "$cpucore" ] && setconfig cpucore $cpucore
|
||||
}
|
||||
setcpucore(){ #手动设置内核架构
|
||||
cpucore_list="armv5 armv7 arm64 386 amd64 mipsle-softfloat mipsle-hardfloat mips-softfloat"
|
||||
echo "-----------------------------------------------"
|
||||
@@ -234,85 +223,41 @@ switch_core(){ #clash与singbox内核切换
|
||||
done
|
||||
}
|
||||
}
|
||||
if echo "$crashcore" | grep -q 'singbox';then
|
||||
COMMAND='"$TMPDIR/CrashCore run -D $BINDIR -C $TMPDIR/jsons"'
|
||||
else
|
||||
COMMAND='"$TMPDIR/CrashCore -d $BINDIR -f $TMPDIR/config.yaml"'
|
||||
fi
|
||||
setconfig COMMAND "$COMMAND" "$CRASHDIR"/configs/command.env && . "$CRASHDIR"/configs/command.env
|
||||
}
|
||||
getcore(){ #下载内核文件
|
||||
. "$CRASHDIR"/libs/core_tools.sh #调用下载工具
|
||||
[ -z "$crashcore" ] && crashcore=meta
|
||||
[ -z "$cpucore" ] && getcpucore
|
||||
[ -z "$cpucore" ] && check_cpucore
|
||||
[ "$crashcore" = unknow ] && setcoretype
|
||||
echo "$crashcore" | grep -q 'singbox' && core_new=singbox || core_new=clash
|
||||
#获取在线内核文件
|
||||
echo "-----------------------------------------------"
|
||||
echo "正在在线获取$crashcore核心文件……"
|
||||
if [ -n "$custcorelink" ];then
|
||||
zip_type=$(echo $custcorelink | grep -oE 'tar.gz$')
|
||||
[ -z "$zip_type" ] && zip_type=$(echo $custcorelink | grep -oE 'gz$')
|
||||
if [ -n "$zip_type" ];then
|
||||
"$CRASHDIR"/start.sh webget "$TMPDIR"/core_new.${zip_type} "$custcorelink"
|
||||
else
|
||||
echo -e "\033[31m链接不是以.tar.gz或.gz结尾!下载已取消!\033[0m"
|
||||
exit
|
||||
fi
|
||||
else
|
||||
"$CRASHDIR"/start.sh get_bin "$TMPDIR"/core_new.tar.gz bin/${crashcore}/${core_new}-linux-${cpucore}.tar.gz
|
||||
fi
|
||||
if [ "$?" = "1" ];then
|
||||
core_webget
|
||||
case "$?" in
|
||||
0)
|
||||
echo -e "\033[32m$crashcore核心下载成功!\033[0m"
|
||||
sleep 1
|
||||
switch_core
|
||||
;;
|
||||
1)
|
||||
echo -e "\033[31m核心文件下载失败!\033[0m"
|
||||
rm -rf "$TMPDIR"/core_new.tar.gz
|
||||
[ -z "$custcorelink" ] && error_down
|
||||
else
|
||||
[ -n "$(pidof CrashCore)" ] && {
|
||||
"$CRASHDIR"/start.sh stop #停止内核服务防止内存不足
|
||||
rm -rf "$TMPDIR"/CrashCore #删除缓存内核防止缓存空间不足
|
||||
}
|
||||
[ -f "$TMPDIR"/core_new.tar.gz ] && {
|
||||
mkdir -p "$TMPDIR"/core_tmp
|
||||
[ "$BINDIR" = "$TMPDIR" ] && rm -rf "$TMPDIR"/CrashCore #小闪存模式防止空间不足
|
||||
tar -zxf ""$TMPDIR"/core_new.tar.gz" ${tar_para} -C "$TMPDIR"/core_tmp/
|
||||
for file in $(find "$TMPDIR"/core_tmp 2>/dev/null);do
|
||||
[ -f $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|premium)')" ] && mv -f $file "$TMPDIR"/core_new
|
||||
done
|
||||
rm -rf "$TMPDIR"/core_tmp
|
||||
}
|
||||
[ -f "$TMPDIR"/core_new.gz ] && gunzip "$TMPDIR"/core_new.gz && rm -rf "$TMPDIR"/core_new.gz
|
||||
chmod +x "$TMPDIR"/core_new
|
||||
[ "$crashcore" = unknow ] && setcoretype
|
||||
if echo "$crashcore" | grep -q 'singbox';then
|
||||
core_v=$("$TMPDIR"/core_new version 2>/dev/null | grep version | awk '{print $3}')
|
||||
else
|
||||
core_v=$("$TMPDIR"/core_new -v 2>/dev/null | head -n 1 | sed 's/ linux.*//;s/.* //')
|
||||
fi
|
||||
if [ -z "$core_v" ];then
|
||||
echo -e "\033[31m核心文件下载成功但校验失败!请尝试手动指定CPU版本\033[0m"
|
||||
rm -rf "$TMPDIR"/core_new
|
||||
rm -rf "$TMPDIR"/core_new.tar.gz
|
||||
setcpucore
|
||||
else
|
||||
echo -e "\033[32m$crashcore核心下载成功!\033[0m"
|
||||
sleep 1
|
||||
mv -f "$TMPDIR"/core_new "$TMPDIR"/CrashCore
|
||||
if [ -f "$TMPDIR"/core_new.tar.gz ];then
|
||||
mv -f "$TMPDIR"/core_new.tar.gz "$BINDIR"/CrashCore.tar.gz
|
||||
else
|
||||
tar -zcf "$BINDIR"/CrashCore.tar.gz ${tar_para} -C "$TMPDIR" CrashCore
|
||||
fi
|
||||
setconfig crashcore $crashcore
|
||||
setconfig core_v $core_v
|
||||
setconfig custcorelink $custcorelink
|
||||
switch_core
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo -e "\033[31m核心文件下载成功但校验失败!请尝试手动指定CPU版本\033[0m"
|
||||
rm -rf ${TMPDIR}/core_new
|
||||
rm -rf ${TMPDIR}/core_new.tar.gz
|
||||
setcpucore
|
||||
;;
|
||||
esac
|
||||
}
|
||||
setcustcore(){ #自定义内核
|
||||
checkcustcore(){
|
||||
[ "$api_tag" = "latest" ] && api_url=latest || api_url="tags/$api_tag"
|
||||
#通过githubapi获取内核信息
|
||||
echo -e "\033[32m正在获取内核文件链接!\033[0m"
|
||||
"$CRASHDIR"/start.sh webget "$TMPDIR"/github_api https://api.github.com/repos/${project}/releases/${api_url}
|
||||
webget "$TMPDIR"/github_api https://api.github.com/repos/${project}/releases/${api_url}
|
||||
if [ "$?" = 0 ];then
|
||||
release_tag=$(cat "$TMPDIR"/github_api | grep '"tag_name":' | awk -F '"' '{print $4}')
|
||||
release_date=$(cat "$TMPDIR"/github_api | grep '"published_at":' | awk -F '"' '{print $4}')
|
||||
@@ -358,7 +303,7 @@ setcustcore(){ #自定义内核
|
||||
fi
|
||||
rm -rf "$TMPDIR"/core.list
|
||||
}
|
||||
[ -z "$cpucore" ] && getcpucore
|
||||
[ -z "$cpucore" ] && check_cpucore
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m此处内核通常源自互联网采集,此处致谢各位开发者!\033[0m"
|
||||
echo -e "\033[33m自定义内核未经过完整适配,使用出现问题请自行解决!\033[0m"
|
||||
@@ -426,7 +371,7 @@ setcustcore(){ #自定义内核
|
||||
a)
|
||||
read -p "请输入自定义内核的链接地址(必须是以.tar.gz或.gz结尾的压缩文件) > " link
|
||||
[ -n "$link" ] && custcorelink="$link"
|
||||
crashcore=unknow
|
||||
setcoretype
|
||||
getcore
|
||||
;;
|
||||
*)
|
||||
@@ -437,12 +382,11 @@ setcustcore(){ #自定义内核
|
||||
setcore(){ #内核选择菜单
|
||||
#获取核心及版本信息
|
||||
[ -z "$crashcore" ] && crashcore="unknow"
|
||||
[ ! -f "$CRASHDIR"/CrashCore.tar.gz -o ! -f "$BINDIR"/CrashCore.tar.gz ] && crashcore="未安装核心"
|
||||
echo "$crashcore" | grep -q 'singbox' && core_old=singbox || core_old=clash
|
||||
[ -n "$custcorelink" ] && custcore="$(echo $custcorelink | sed 's#.*github.com##; s#/releases/download/#@#; s#-linux.*$##')"
|
||||
###
|
||||
echo "-----------------------------------------------"
|
||||
[ -z "$cpucore" ] && getcpucore
|
||||
[ -z "$cpucore" ] && check_cpucore
|
||||
echo -e "当前内核:\033[42;30m $crashcore \033[47;30m$core_v\033[0m"
|
||||
echo -e "当前系统处理器架构:\033[32m $cpucore \033[0m"
|
||||
echo -e "\033[33m请选择需要使用的核心版本!\033[0m"
|
||||
@@ -515,7 +459,7 @@ getgeo(){ #下载Geo文件
|
||||
#生成链接
|
||||
echo "-----------------------------------------------"
|
||||
echo 正在从服务器获取数据库文件…………
|
||||
"$CRASHDIR"/start.sh get_bin "$TMPDIR"/${geoname} bin/geodata/$geotype
|
||||
get_bin "$TMPDIR"/${geoname} bin/geodata/$geotype
|
||||
if [ "$?" = "1" ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m文件下载失败!\033[0m"
|
||||
@@ -543,7 +487,7 @@ setcustgeo(){ #下载自定义数据库文件
|
||||
getcustgeo(){
|
||||
echo "-----------------------------------------------"
|
||||
echo "正在获取数据库文件…………"
|
||||
"$CRASHDIR"/start.sh webget "$TMPDIR"/$geoname $custgeolink
|
||||
webget "$TMPDIR"/$geoname $custgeolink
|
||||
if [ "$?" = "1" ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m文件下载失败!\033[0m"
|
||||
@@ -563,7 +507,7 @@ setcustgeo(){ #下载自定义数据库文件
|
||||
[ "$api_tag" = "latest" ] && api_url=latest || api_url="tags/$api_tag"
|
||||
[ ! -s "$TMPDIR"/geo.list ] && {
|
||||
echo -e "\033[32m正在查找可更新的数据库文件!\033[0m"
|
||||
"$CRASHDIR"/start.sh webget "$TMPDIR"/github_api https://api.github.com/repos/${project}/releases/${api_url}
|
||||
webget "$TMPDIR"/github_api https://api.github.com/repos/${project}/releases/${api_url}
|
||||
release_tag=$(cat "$TMPDIR"/github_api | grep '"tag_name":' | awk -F '"' '{print $4}')
|
||||
cat "$TMPDIR"/github_api | grep "browser_download_url" | grep -oE 'releases/download.*' | grep -oiE 'geosite.*\.dat"$|country.*\.mmdb"$|.*.mrs|.*.srs' | sed 's|.*/||' | sed 's/"//' > "$TMPDIR"/geo.list
|
||||
rm -rf "$TMPDIR"/github_api
|
||||
@@ -755,7 +699,7 @@ getdb(){
|
||||
dblink="${update_url}/"
|
||||
echo "-----------------------------------------------"
|
||||
echo 正在连接服务器获取安装文件…………
|
||||
"$CRASHDIR"/start.sh get_bin "$TMPDIR"/clashdb.tar.gz bin/dashboard/${db_type}.tar.gz
|
||||
get_bin "$TMPDIR"/clashdb.tar.gz bin/dashboard/${db_type}.tar.gz
|
||||
if [ "$?" = "1" ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m文件下载失败!\033[0m"
|
||||
@@ -896,7 +840,7 @@ setdb(){
|
||||
getcrt(){
|
||||
echo "-----------------------------------------------"
|
||||
echo "正在连接服务器获取安装文件…………"
|
||||
"$CRASHDIR"/start.sh get_bin "$TMPDIR"/ca-certificates.crt bin/fix/ca-certificates.crt
|
||||
get_bin "$TMPDIR"/ca-certificates.crt bin/fix/ca-certificates.crt
|
||||
if [ "$?" = "1" ];then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m文件下载失败!\033[0m"
|
||||
@@ -907,7 +851,7 @@ getcrt(){
|
||||
[ -f $openssldir/certs ] && rm -rf $openssldir/certs #如果certs不是目录而是文件则删除并创建目录
|
||||
mkdir -p $openssldir/certs
|
||||
mv -f "$TMPDIR"/ca-certificates.crt $crtdir
|
||||
"$CRASHDIR"/start.sh webget /dev/null https://baidu.com echooff rediron skipceroff
|
||||
webget /dev/null https://baidu.com echooff rediron skipceroff
|
||||
if [ "$?" = "1" ];then
|
||||
export CURL_CA_BUNDLE=$crtdir
|
||||
echo "export CURL_CA_BUNDLE=$crtdir" >> /etc/profile
|
||||
@@ -1040,7 +984,7 @@ setserver(){
|
||||
echo "-----------------------------------------------"
|
||||
if [ -n "$url_id" ] && [ "$url_id" -lt 200 ];then
|
||||
echo -ne "\033[32m正在获取版本信息!\033[0m\r"
|
||||
"$CRASHDIR"/start.sh get_bin "$TMPDIR"/release_version bin/release_version
|
||||
get_bin "$TMPDIR"/release_version bin/release_version
|
||||
if [ "$?" = "0" ];then
|
||||
echo -e "\033[31m请选择想要回退至的稳定版版本:\033[0m"
|
||||
cat "$TMPDIR"/release_version | awk '{print " "NR" "$1}'
|
||||
|
||||
@@ -16,6 +16,7 @@ set_dns_mod() { #DNS模式设置
|
||||
echo -e " 4 route模式: \033[32m防污染防泄露,全真实IP\033[0m"
|
||||
echo -e " cn域名realip其他dns2proxy分流"
|
||||
fi
|
||||
echo "-----------------------------------------------"
|
||||
[ "$dns_mod" = "fake-ip" ] || [ "$dns_mod" = "mix" ] &&
|
||||
echo -e " 8 管理Fake-ip过滤列表"
|
||||
echo -e " 9 \033[36mDNS进阶设置\033[0m"
|
||||
|
||||
149
scripts/menus/set_crashdir.sh
Normal file
149
scripts/menus/set_crashdir.sh
Normal file
@@ -0,0 +1,149 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) Juewuy
|
||||
|
||||
. /tmp/SC_tmp/libs/check_dir_avail.sh
|
||||
|
||||
set_crashdir() {
|
||||
set_usb_dir() {
|
||||
echo -e "请选择安装目录"
|
||||
du -hL /mnt | awk '{print " "NR" "$2" "$1}'
|
||||
read -p "请输入相应数字 > " num
|
||||
dir=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p)
|
||||
if [ -z "$dir" ]; then
|
||||
echo -e "\033[31m输入错误!请重新设置!\033[0m"
|
||||
set_usb_dir
|
||||
fi
|
||||
}
|
||||
set_asus_dir() {
|
||||
echo -e "请选择U盘目录"
|
||||
du -hL /tmp/mnt | awk -F/ 'NF<=4' | awk '{print " "NR" "$2" "$1}'
|
||||
read -p "请输入相应数字 > " num
|
||||
dir=$(du -hL /tmp/mnt | awk -F/ 'NF<=4' | awk '{print $2}' | sed -n "$num"p)
|
||||
if [ ! -f "$dir/asusware.arm/etc/init.d/S50downloadmaster" ]; then
|
||||
echo -e "\033[31m未找到下载大师自启文件:$dir/asusware.arm/etc/init.d/S50downloadmaster,请检查设置!\033[0m"
|
||||
set_asus_dir
|
||||
fi
|
||||
}
|
||||
set_cust_dir() {
|
||||
echo "-----------------------------------------------"
|
||||
echo "可用路径 剩余空间:"
|
||||
df -h | awk '{print $6,$4}' | sed 1d
|
||||
echo "路径是必须带 / 的格式,注意写入虚拟内存(/tmp,/opt,/sys...)的文件会在重启后消失!!!"
|
||||
read -p "请输入自定义路径 > " dir
|
||||
if [ "$(dir_avail $dir)" = 0 ] || [ -n "$(echo $dir | grep -E 'tmp|opt|sys')" ]; then
|
||||
echo "\033[31m路径错误!请重新设置!\033[0m"
|
||||
set_cust_dir
|
||||
fi
|
||||
}
|
||||
echo "-----------------------------------------------"
|
||||
if [ -n "$systype" ]; then
|
||||
[ "$systype" = "Padavan" ] && dir=/etc/storage
|
||||
[ "$systype" = "mi_snapshot" ] && {
|
||||
echo -e "\033[33m检测到当前设备为小米官方系统,请选择安装位置\033[0m"
|
||||
[ -d /data ] && $echo " 1 安装到 /data 目录,剩余空间:$(dir_avail /data -h)(支持软固化功能)"
|
||||
[ -d /userdisk ] && $echo " 2 安装到 /userdisk 目录,剩余空间:$(dir_avail /userdisk -h)(支持软固化功能)"
|
||||
[ -d /data/other_vol ] && $echo " 3 安装到 /data/other_vol 目录,剩余空间:$(dir_avail /data/other_vol -h)(支持软固化功能)"
|
||||
$echo " 4 安装到自定义目录(不推荐,不明勿用!)"
|
||||
echo " 0 退出安装"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入相应数字 > " num
|
||||
case "$num" in
|
||||
1)
|
||||
dir=/data
|
||||
;;
|
||||
2)
|
||||
dir=/userdisk
|
||||
;;
|
||||
3)
|
||||
dir=/data/other_vol
|
||||
;;
|
||||
4)
|
||||
set_cust_dir
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
[ "$systype" = "asusrouter" ] && {
|
||||
echo -e "\033[33m检测到当前设备为华硕固件,请选择安装方式\033[0m"
|
||||
echo -e " 1 基于USB设备安装(限23年9月之前固件,须插入\033[31m任意\033[0mUSB设备)"
|
||||
echo -e " 2 基于自启脚本安装(仅支持梅林及部分非koolshare官改固件)"
|
||||
echo -e " 3 基于U盘+下载大师安装(支持所有固件,限ARM设备,须插入U盘或移动硬盘)"
|
||||
echo -e " 0 退出安装"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入相应数字 > " num
|
||||
case "$num" in
|
||||
1)
|
||||
read -p "将脚本安装到USB存储/系统闪存?(1/0) > " res
|
||||
[ "$res" = "1" ] && set_usb_dir || dir=/jffs
|
||||
usb_status=1
|
||||
;;
|
||||
2)
|
||||
echo -e "如无法正常开机启动,请重新使用USB方式安装!"
|
||||
sleep 2
|
||||
dir=/jffs
|
||||
;;
|
||||
3)
|
||||
echo -e "请先在路由器网页后台安装下载大师并启用,之后选择外置存储所在目录!"
|
||||
sleep 2
|
||||
set_asus_dir
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
[ "$systype" = "ng_snapshot" ] && dir=/tmp/mnt
|
||||
else
|
||||
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用户)"
|
||||
echo -e " 4 在\033[32m外置存储\033[0m中安装"
|
||||
echo -e " 5 手动设置安装目录"
|
||||
echo -e " 0 退出安装"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入相应数字 > " num
|
||||
#设置目录
|
||||
case "$num" in
|
||||
1)
|
||||
dir=/etc
|
||||
;;
|
||||
2)
|
||||
dir=/usr/share
|
||||
;;
|
||||
3)
|
||||
dir=~/.local/share
|
||||
mkdir -p ~/.config/systemd/user
|
||||
;;
|
||||
4)
|
||||
set_usb_dir
|
||||
;;
|
||||
5)
|
||||
echo "-----------------------------------------------"
|
||||
echo "可用路径 剩余空间:"
|
||||
df -h | awk '{print $6,$4}' | sed 1d
|
||||
echo "路径是必须带 / 的格式,注意写入虚拟内存(/tmp,/opt,/sys...)的文件会在重启后消失!!!"
|
||||
read -p "请输入自定义路径 > " dir
|
||||
if [ -z "$dir" ]; then
|
||||
echo -e "\033[31m路径错误!请重新设置!\033[0m"
|
||||
setdir
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "安装已取消"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if [ ! -w $dir ]; then
|
||||
echo -e "\033[31m没有$dir目录写入权限!请重新设置!\033[0m" && sleep 1 && setdir
|
||||
else
|
||||
echo -e "目标目录\033[32m$dir\033[0m空间剩余:$(dir_avail $dir -h)"
|
||||
read -p "确认安装?(1/0) > " res
|
||||
[ "$res" = "1" ] && CRASHDIR=$dir/ShellCrash || setdir
|
||||
fi
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user