From 85af5ed3106616ea4c1ff3883e8a9c1ccaadbe89 Mon Sep 17 00:00:00 2001 From: juewuy Date: Mon, 21 Sep 2020 23:51:03 +0800 Subject: [PATCH] =?UTF-8?q?v1.0.0beta9=20~=E4=BF=AE=E5=A4=8D=E9=83=A8?= =?UTF-8?q?=E5=88=86=E8=AE=BE=E5=A4=87=E5=90=AF=E5=8A=A8=E6=97=B6=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E7=9A=84bug=20~=E4=BF=AE=E6=94=B9=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=EF=BC=8C=E4=BC=98=E5=8C=96=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=20~=E5=AE=89=E8=A3=85systemd=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E8=84=9A=E6=9C=AC=E6=97=B6=E5=A2=9E=E5=8A=A0reload=20?= =?UTF-8?q?~=E8=BF=9B=E4=B8=80=E6=AD=A5=E4=BC=98=E5=8C=96=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/clashfm.tar.gz | Bin 16456 -> 16451 bytes bin/version | 2 +- install.sh | 138 ++++++++++++++++++++++--------------------- install_cdn.sh | 138 ++++++++++++++++++++++--------------------- install_test.sh | 143 +++++++++++++++++++++++---------------------- scripts/clash.sh | 12 ++-- scripts/getdate.sh | 63 +++++++++++--------- scripts/start.sh | 13 ++--- 8 files changed, 267 insertions(+), 242 deletions(-) diff --git a/bin/clashfm.tar.gz b/bin/clashfm.tar.gz index 8acf6b48697ef799d38859fcbd65018c525c5516..8a96d5b40fd568b0de6d5e4922dcbf9ea618945b 100644 GIT binary patch delta 16258 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 saDhh%#BQR(@RqM@Eu3-|< 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 diff --git a/bin/version b/bin/version index 9f40828..bd0ac7d 100644 --- a/bin/version +++ b/bin/version @@ -1,2 +1,2 @@ GeoIP_v=20200917 -versionsh=1.0.0beta9 +versionsh=1.0.0beta9fix1 diff --git a/install.sh b/install.sh index d2bd0dd..5adb069 100644 --- a/install.sh +++ b/install.sh @@ -1,28 +1,86 @@ #! /bin/bash # Copyright (C) Juewuy +echo='echo -e' && [ -n "$(ls -l /bin/sh|grep -o dash)" ] && echo=echo +test=0 + echo "***********************************************" echo "** 欢迎使用 **" echo "** ShellClash **" echo "** by Juewuy **" echo "***********************************************" + url="https://cdn.jsdelivr.net/gh/juewuy/ShellClash" -release_new=$(curl -kfsSL --resolve api.github.com:443:140.82.113.5 "https://api.github.com/repos/juewuy/ShellClash/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') +if [ $test -ge 1 ];then + url="--resolve raw.githubusercontent.com:443:199.232.68.133 https://raw.githubusercontent.com/juewuy/ShellClash/master" + [ $test -ge 2 ] && url="http://192.168.31.30:8080/clash-for-Miwifi" +else + release_new=$(curl -kfsSL --resolve api.github.com:443:140.82.113.5 "https://api.github.com/repos/juewuy/ShellClash/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') #检查版本 +fi [ -z "$release_new" ] && release_new=$(curl -kfsSL $url/bin/version | grep "versionsh" | awk -F "=" '{print $2}') [ -z "$release_new" ] && echo "无法连接服务器!" && exit - -echo -e "最新版本:\033[32m$release_new\033[0m" +tarurl=$url@$release_new/bin/clashfm.tar.gz +[ $test -ge 1 ] && tarurl=$url/bin/clashfm.tar.gz +gettar(){ + result=$(curl -w %{http_code} -kLo /tmp/clashfm.tar.gz $tarurl) + [ "$result" != "200" ] && echo "文件下载失败!" && exit 1 + #解压 + echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo 开始解压文件! + mkdir -p $clashdir > /dev/null + tar -zxvf '/tmp/clashfm.tar.gz' -C $clashdir/ + [ $? -ne 0 ] && echo "文件解压失败!" && exit 1 + #初始化文件目录 + [ -f "$clashdir/mark" ] || echo '#标识clash运行状态的文件,不明勿动!' > $clashdir/mark + #判断系统类型写入不同的启动文件 + if [ -f /etc/rc.common ];then + #设为init.d方式启动 + mv $clashdir/clashservice /etc/init.d/clash + chmod 777 /etc/init.d/clash + else + [ -d /etc/systemd/system ] && sysdir=/etc/systemd/system + [ -d /usr/lib/systemd/system/ ] && sysdir=/usr/lib/systemd/system/ + if [ -n "$sysdir" ];then + #设为systemd方式启动 + mv $clashdir/clash.service $sysdir/clash.service + sed -i "s%/etc/clash%$clashdir%g" $sysdir/clash.service + systemctl daemon-reload + rm -rf /etc/init.d/clash + else + #设为保守模式启动 + sed -i '/start_old=*/'d $clashdir/mark + sed -i "1i\start_old=已开启" $clashdir/mark + fi + fi + #修饰文件及版本号 + shtype=sh && [ -n "$(ls -l /bin/sh|grep -o dash)" ] && shtype=bash + sed -i "s%#!/bin/sh%#!/bin/$shtype%g" $clashdir/start.sh + chmod 777 $clashdir/start.sh + sed -i '/versionsh_l=*/'d $clashdir/mark + sed -i "1i\versionsh_l=$release_new" $clashdir/mark + #设置环境变量 + sed -i '/alias clash=*/'d /etc/profile + echo "alias clash=\"$shtype $clashdir/clash.sh\"" >> /etc/profile #设置快捷命令环境变量 + sed -i '/export clashdir=*/'d /etc/profile + echo "export clashdir=\"$clashdir\"" >> /etc/profile #设置clash路径环境变量 + #删除临时文件 + rm -rf /tmp/clashfm.tar.gz + rm -rf $clashdir/clashservice + rm -rf $clashdir/clash.service +} +#输出 +$echo "最新版本:\033[32m$release_new\033[0m" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -echo -e "\033[44m如遇问题请加TG群反馈:\033[42;30m t.me/clashfm \033[0m" -echo -e "\033[37m支持各种基于openwrt的路由器设备" -echo -e "\033[33m有限兼容debian、centos等Linux系统\033[0m" +$echo "\033[44m如遇问题请加TG群反馈:\033[42;30m t.me/clashfm \033[0m" +$echo "\033[37m支持各种基于openwrt的路由器设备" +$echo "\033[33m支持Debian、Centos等标准Linux系统\033[0m" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -echo -e "\033[32m 1 在默认目录(/etc)安装ShellClash" -echo -e "\033[33m 2 手动设置安装目录(不明勿用!)" -echo -e "\033[0m 0 退出安装" +$echo "\033[32m 1 在默认目录(/etc)安装" +$echo "\033[33m 2 手动设置安装目录" +$echo "\033[0m 0 退出安装" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ read -p "请输入相应数字 > " num - +#设置目录 if [ -z $num ];then echo 安装已取消 exit; @@ -42,66 +100,16 @@ else echo 安装已取消 exit; fi -#下载文件包 +clashdir=$dir/clash +#输出 echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo 开始从服务器获取安装文件! echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -tarurl=$url@$release_new/bin/clashfm.tar.gz -if command -v curl &> /dev/null; then - result=$(curl -w %{http_code} -kLo /tmp/clashfm.tar.gz $tarurl) -else $result - wget-ssl -q --no-check-certificate --tries=1 --timeout=10 -O /tmp/clashfm.tar.gz $tarurl - [ $? -eq 0 ] && result="200" -fi -[ "$result" != "200" ] && echo "文件下载失败!" && exit 1 -#解压 -echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -echo 开始解压文件! -mkdir -p $dir/clash > /dev/null -tar -zxvf '/tmp/clashfm.tar.gz' -C $dir/clash/ -[ $? -ne 0 ] && echo "文件解压失败!" && exit 1 -#初始化文件目录 -if [ ! -f "$dir/clash/mark" ]; then -cat >$dir/clash/mark<> /etc/profile #设置快捷命令环境变量 -sed -i '/export clashdir=*/'d /etc/profile -echo "export clashdir=\"$dir/clash\"" >> /etc/profile #设置clash路径环境变量 -#删除临时文件 -rm -rf /tmp/clashfm.tar.gz -rm -rf $dir/clash/clashservice -rm -rf $dir/clash/clash.service -#提示 +#下载及安装 +gettar echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo ShellClash 已经安装成功! echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -echo -e "\033[33m输入\033[30;47m clash \033[0;33m命令即可管理!!!\033[0m" +$echo "\033[33m输入\033[30;47m clash \033[0;33m命令即可管理!!!\033[0m" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/install_cdn.sh b/install_cdn.sh index d2bd0dd..5adb069 100644 --- a/install_cdn.sh +++ b/install_cdn.sh @@ -1,28 +1,86 @@ #! /bin/bash # Copyright (C) Juewuy +echo='echo -e' && [ -n "$(ls -l /bin/sh|grep -o dash)" ] && echo=echo +test=0 + echo "***********************************************" echo "** 欢迎使用 **" echo "** ShellClash **" echo "** by Juewuy **" echo "***********************************************" + url="https://cdn.jsdelivr.net/gh/juewuy/ShellClash" -release_new=$(curl -kfsSL --resolve api.github.com:443:140.82.113.5 "https://api.github.com/repos/juewuy/ShellClash/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') +if [ $test -ge 1 ];then + url="--resolve raw.githubusercontent.com:443:199.232.68.133 https://raw.githubusercontent.com/juewuy/ShellClash/master" + [ $test -ge 2 ] && url="http://192.168.31.30:8080/clash-for-Miwifi" +else + release_new=$(curl -kfsSL --resolve api.github.com:443:140.82.113.5 "https://api.github.com/repos/juewuy/ShellClash/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') #检查版本 +fi [ -z "$release_new" ] && release_new=$(curl -kfsSL $url/bin/version | grep "versionsh" | awk -F "=" '{print $2}') [ -z "$release_new" ] && echo "无法连接服务器!" && exit - -echo -e "最新版本:\033[32m$release_new\033[0m" +tarurl=$url@$release_new/bin/clashfm.tar.gz +[ $test -ge 1 ] && tarurl=$url/bin/clashfm.tar.gz +gettar(){ + result=$(curl -w %{http_code} -kLo /tmp/clashfm.tar.gz $tarurl) + [ "$result" != "200" ] && echo "文件下载失败!" && exit 1 + #解压 + echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo 开始解压文件! + mkdir -p $clashdir > /dev/null + tar -zxvf '/tmp/clashfm.tar.gz' -C $clashdir/ + [ $? -ne 0 ] && echo "文件解压失败!" && exit 1 + #初始化文件目录 + [ -f "$clashdir/mark" ] || echo '#标识clash运行状态的文件,不明勿动!' > $clashdir/mark + #判断系统类型写入不同的启动文件 + if [ -f /etc/rc.common ];then + #设为init.d方式启动 + mv $clashdir/clashservice /etc/init.d/clash + chmod 777 /etc/init.d/clash + else + [ -d /etc/systemd/system ] && sysdir=/etc/systemd/system + [ -d /usr/lib/systemd/system/ ] && sysdir=/usr/lib/systemd/system/ + if [ -n "$sysdir" ];then + #设为systemd方式启动 + mv $clashdir/clash.service $sysdir/clash.service + sed -i "s%/etc/clash%$clashdir%g" $sysdir/clash.service + systemctl daemon-reload + rm -rf /etc/init.d/clash + else + #设为保守模式启动 + sed -i '/start_old=*/'d $clashdir/mark + sed -i "1i\start_old=已开启" $clashdir/mark + fi + fi + #修饰文件及版本号 + shtype=sh && [ -n "$(ls -l /bin/sh|grep -o dash)" ] && shtype=bash + sed -i "s%#!/bin/sh%#!/bin/$shtype%g" $clashdir/start.sh + chmod 777 $clashdir/start.sh + sed -i '/versionsh_l=*/'d $clashdir/mark + sed -i "1i\versionsh_l=$release_new" $clashdir/mark + #设置环境变量 + sed -i '/alias clash=*/'d /etc/profile + echo "alias clash=\"$shtype $clashdir/clash.sh\"" >> /etc/profile #设置快捷命令环境变量 + sed -i '/export clashdir=*/'d /etc/profile + echo "export clashdir=\"$clashdir\"" >> /etc/profile #设置clash路径环境变量 + #删除临时文件 + rm -rf /tmp/clashfm.tar.gz + rm -rf $clashdir/clashservice + rm -rf $clashdir/clash.service +} +#输出 +$echo "最新版本:\033[32m$release_new\033[0m" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -echo -e "\033[44m如遇问题请加TG群反馈:\033[42;30m t.me/clashfm \033[0m" -echo -e "\033[37m支持各种基于openwrt的路由器设备" -echo -e "\033[33m有限兼容debian、centos等Linux系统\033[0m" +$echo "\033[44m如遇问题请加TG群反馈:\033[42;30m t.me/clashfm \033[0m" +$echo "\033[37m支持各种基于openwrt的路由器设备" +$echo "\033[33m支持Debian、Centos等标准Linux系统\033[0m" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -echo -e "\033[32m 1 在默认目录(/etc)安装ShellClash" -echo -e "\033[33m 2 手动设置安装目录(不明勿用!)" -echo -e "\033[0m 0 退出安装" +$echo "\033[32m 1 在默认目录(/etc)安装" +$echo "\033[33m 2 手动设置安装目录" +$echo "\033[0m 0 退出安装" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ read -p "请输入相应数字 > " num - +#设置目录 if [ -z $num ];then echo 安装已取消 exit; @@ -42,66 +100,16 @@ else echo 安装已取消 exit; fi -#下载文件包 +clashdir=$dir/clash +#输出 echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo 开始从服务器获取安装文件! echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -tarurl=$url@$release_new/bin/clashfm.tar.gz -if command -v curl &> /dev/null; then - result=$(curl -w %{http_code} -kLo /tmp/clashfm.tar.gz $tarurl) -else $result - wget-ssl -q --no-check-certificate --tries=1 --timeout=10 -O /tmp/clashfm.tar.gz $tarurl - [ $? -eq 0 ] && result="200" -fi -[ "$result" != "200" ] && echo "文件下载失败!" && exit 1 -#解压 -echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -echo 开始解压文件! -mkdir -p $dir/clash > /dev/null -tar -zxvf '/tmp/clashfm.tar.gz' -C $dir/clash/ -[ $? -ne 0 ] && echo "文件解压失败!" && exit 1 -#初始化文件目录 -if [ ! -f "$dir/clash/mark" ]; then -cat >$dir/clash/mark<> /etc/profile #设置快捷命令环境变量 -sed -i '/export clashdir=*/'d /etc/profile -echo "export clashdir=\"$dir/clash\"" >> /etc/profile #设置clash路径环境变量 -#删除临时文件 -rm -rf /tmp/clashfm.tar.gz -rm -rf $dir/clash/clashservice -rm -rf $dir/clash/clash.service -#提示 +#下载及安装 +gettar echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo ShellClash 已经安装成功! echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -echo -e "\033[33m输入\033[30;47m clash \033[0;33m命令即可管理!!!\033[0m" +$echo "\033[33m输入\033[30;47m clash \033[0;33m命令即可管理!!!\033[0m" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/install_test.sh b/install_test.sh index cd37870..c9a1a15 100644 --- a/install_test.sh +++ b/install_test.sh @@ -1,32 +1,86 @@ #! /bin/bash # Copyright (C) Juewuy +echo='echo -e' && [ -n "$(ls -l /bin/sh|grep -o dash)" ] && echo=echo +test=1 + echo "***********************************************" echo "** 欢迎使用 **" echo "** ShellClash **" echo "** by Juewuy **" echo "***********************************************" -url="http://192.168.31.30:8080/clash-for-Miwifi" -url="--resolve raw.githubusercontent.com:443:199.232.68.133 https://raw.githubusercontent.com/juewuy/ShellClash/master" - -#release_new=$(curl -kfsSL --resolve api.github.com:443:140.82.113.5 "https://api.github.com/repos/juewuy/ShellClash/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') +url="https://cdn.jsdelivr.net/gh/juewuy/ShellClash" +if [ $test -ge 1 ];then + url="--resolve raw.githubusercontent.com:443:199.232.68.133 https://raw.githubusercontent.com/juewuy/ShellClash/master" + [ $test -ge 2 ] && url="http://192.168.31.30:8080/clash-for-Miwifi" +else + release_new=$(curl -kfsSL --resolve api.github.com:443:140.82.113.5 "https://api.github.com/repos/juewuy/ShellClash/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') #检查版本 +fi [ -z "$release_new" ] && release_new=$(curl -kfsSL $url/bin/version | grep "versionsh" | awk -F "=" '{print $2}') -[ -z "$release_new" ] && release_new=$(wget-ssl -q --no-check-certificate --tries=1 --timeout=10 $url/bin/version | grep "versionsh" | awk -F "=" '{print $2}') [ -z "$release_new" ] && echo "无法连接服务器!" && exit - -echo -e "最新版本:\033[32m$release_new\033[0m" +tarurl=$url@$release_new/bin/clashfm.tar.gz +[ $test -ge 1 ] && tarurl=$url/bin/clashfm.tar.gz +gettar(){ + result=$(curl -w %{http_code} -kLo /tmp/clashfm.tar.gz $tarurl) + [ "$result" != "200" ] && echo "文件下载失败!" && exit 1 + #解压 + echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo 开始解压文件! + mkdir -p $clashdir > /dev/null + tar -zxvf '/tmp/clashfm.tar.gz' -C $clashdir/ + [ $? -ne 0 ] && echo "文件解压失败!" && exit 1 + #初始化文件目录 + [ -f "$clashdir/mark" ] || echo '#标识clash运行状态的文件,不明勿动!' > $clashdir/mark + #判断系统类型写入不同的启动文件 + if [ -f /etc/rc.common ];then + #设为init.d方式启动 + mv $clashdir/clashservice /etc/init.d/clash + chmod 777 /etc/init.d/clash + else + [ -d /etc/systemd/system ] && sysdir=/etc/systemd/system + [ -d /usr/lib/systemd/system/ ] && sysdir=/usr/lib/systemd/system/ + if [ -n "$sysdir" ];then + #设为systemd方式启动 + mv $clashdir/clash.service $sysdir/clash.service + sed -i "s%/etc/clash%$clashdir%g" $sysdir/clash.service + systemctl daemon-reload + rm -rf /etc/init.d/clash + else + #设为保守模式启动 + sed -i '/start_old=*/'d $clashdir/mark + sed -i "1i\start_old=已开启" $clashdir/mark + fi + fi + #修饰文件及版本号 + shtype=sh && [ -n "$(ls -l /bin/sh|grep -o dash)" ] && shtype=bash + sed -i "s%#!/bin/sh%#!/bin/$shtype%g" $clashdir/start.sh + chmod 777 $clashdir/start.sh + sed -i '/versionsh_l=*/'d $clashdir/mark + sed -i "1i\versionsh_l=$release_new" $clashdir/mark + #设置环境变量 + sed -i '/alias clash=*/'d /etc/profile + echo "alias clash=\"$shtype $clashdir/clash.sh\"" >> /etc/profile #设置快捷命令环境变量 + sed -i '/export clashdir=*/'d /etc/profile + echo "export clashdir=\"$clashdir\"" >> /etc/profile #设置clash路径环境变量 + #删除临时文件 + rm -rf /tmp/clashfm.tar.gz + rm -rf $clashdir/clashservice + rm -rf $clashdir/clash.service +} +#输出 +$echo "最新版本:\033[32m$release_new\033[0m" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -echo -e "\033[44m如遇问题请加TG群反馈:\033[42;30m t.me/clashfm \033[0m" -echo -e "\033[37m支持各种基于openwrt的路由器设备" -echo -e "\033[33m有限兼容debian、centos等Linux系统\033[0m" +$echo "\033[44m如遇问题请加TG群反馈:\033[42;30m t.me/clashfm \033[0m" +$echo "\033[37m支持各种基于openwrt的路由器设备" +$echo "\033[33m支持Debian、Centos等标准Linux系统\033[0m" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -echo -e "\033[32m 1 在默认目录(/etc)安装ShellClash" -echo -e "\033[33m 2 手动设置安装目录(不明勿用!)" -echo -e "\033[0m 0 退出安装" +$echo "\033[32m 1 在默认目录(/etc)安装" +$echo "\033[33m 2 手动设置安装目录" +$echo "\033[0m 0 退出安装" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ read -p "请输入相应数字 > " num - +#设置目录 if [ -z $num ];then echo 安装已取消 exit; @@ -46,67 +100,16 @@ else echo 安装已取消 exit; fi -#下载文件包 +clashdir=$dir/clash +#输出 echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo 开始从服务器获取安装文件! echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -tarurl=$url/bin/clashfm.tar.gz -if command -v curl &> /dev/null; then - result=$(curl -w %{http_code} -kLo /tmp/clashfm.tar.gz $tarurl) -else $result - wget-ssl -q --no-check-certificate --tries=1 --timeout=10 -O /tmp/clashfm.tar.gz $tarurl - [ $? -eq 0 ] && result="200" -fi -[ "$result" != "200" ] && echo "文件下载失败!" && exit 1 -#解压 -echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -echo 开始解压文件! -mkdir -p $dir/clash > /dev/null -tar -zxvf '/tmp/clashfm.tar.gz' -C $dir/clash/ -[ $? -ne 0 ] && echo "文件解压失败!" && exit 1 -#初始化文件目录 -if [ ! -f "$dir/clash/mark" ]; then -cat >$dir/clash/mark<> /etc/profile #设置快捷命令环境变量 -sed -i '/export clashdir=*/'d /etc/profile -echo "export clashdir=\"$dir/clash\"" >> /etc/profile #设置clash路径环境变量 -#删除临时文件 -rm -rf /tmp/clashfm.tar.gz -rm -rf $dir/clash/clashservice -rm -rf $dir/clash/clash.service -#提示 +#下载及安装 +gettar echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo ShellClash 已经安装成功! echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -echo -e "\033[33m输入\033[30;47m clash \033[0;33m命令即可管理!!!\033[0m" +$echo "\033[33m输入\033[30;47m clash \033[0;33m命令即可管理!!!\033[0m" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - diff --git a/scripts/clash.sh b/scripts/clash.sh index 31af206..46986cf 100644 --- a/scripts/clash.sh +++ b/scripts/clash.sh @@ -694,25 +694,25 @@ if [[ $num -le 9 ]] > /dev/null 2>&1; then elif [[ $num == 8 ]]; then echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo -e "感谢:\033[32mClash \033[0m作者\033[36m Dreamacro\033[0m 项目地址:\033[32mhttps://github.com/Dreamacro/clash\033[0m" - echo -e "感谢:\033[32malecthw大神提供的GeoIP数据库\033[0m 项目地址:\033[32mhttps://github.com/alecthw/mmdb_china_ip_list\033[0m" + echo -e "感谢:\033[32msubconverter \033[0m作者\033[36m tindy2013\033[0m 项目地址:\033[32mhttps://github.com/tindy2013/subconverter\033[0m" + echo -e "感谢:\033[32malecthw提供的GeoIP数据库\033[0m 项目地址:\033[32mhttps://github.com/alecthw/mmdb_china_ip_list\033[0m" echo -e "感谢:\033[32m更多的帮助过我的人!\033[0m" - update + update elif [[ $num == 9 ]]; then read -p "确认卸载clash?(警告:该操作不可逆!)[1/0] " res if [ "$res" = '1' ]; then - /etc/init.d/clash disable - /etc/init.d/clash stop + $clashdir/start.sh stop rm -rf $clashdir rm -rf /etc/init.d/clash rm -rf /etc/systemd/system/clash.service rm -rf /usr/lib/systemd/system/clash.service rm -rf /www/clash - rm -rf $csh sed -i '/alias clash=*/'d /etc/profile sed -i '/export clashdir=*/'d /etc/profile source /etc/profile > /dev/null 2>&1 - echo 已卸载clash相关文件! + echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo 已卸载clash相关文件!有缘再会! exit fi echo -e "\033[31m操作已取消!\033[0m" diff --git a/scripts/getdate.sh b/scripts/getdate.sh index 2b02ba8..1196e47 100644 --- a/scripts/getdate.sh +++ b/scripts/getdate.sh @@ -223,39 +223,33 @@ else echo -e "\033[31m请输入正确的链接地址!!!\033[0m" fi } -getsh(){ -echo ----------------------------------------------- -echo -e "当前脚本版本为:\033[33m $versionsh_l \033[0m" -echo -e "最新脚本版本为:\033[32m $release_new \033[0m" -echo ----------------------------------------------- -read -p "是否更新脚本?[1/0] > " res -if [ "$res" = '1' ]; then - if command -v curl &> /dev/null; then - echo 正在获取更新文件 - result=$(curl -w %{http_code} -kLo /tmp/clashfm.tar.gz $update_url/bin/clashfm.tar.gz) - else $result - wget-ssl -q --no-check-certificate --tries=1 --timeout=10 -O /tmp/clashfm.tar.gz $update_url/bin/clashfm.tar.gz - [ $? -eq 0 ] && result="200" - fi +gettar(){ + result=$(curl -w %{http_code} -kLo /tmp/clashfm.tar.gz $tarurl) [ "$result" != "200" ] && echo "文件下载失败!" && exit 1 #解压 - echo ----------------------------------------------- + echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo 开始解压文件! mkdir -p $clashdir > /dev/null - tar -zxvf '/tmp/clashfm.tar.gz' -C $clashdir/ > /dev/null + tar -zxvf '/tmp/clashfm.tar.gz' -C $clashdir/ [ $? -ne 0 ] && echo "文件解压失败!" && exit 1 + #初始化文件目录 + [ -f "$clashdir/mark" ] || echo '#标识clash运行状态的文件,不明勿动!' > $clashdir/mark #判断系统类型写入不同的启动文件 if [ -f /etc/rc.common ];then - mv $clashdir/clashservice /etc/init.d/clash #将rc服务文件移动到系统目录 - chmod 777 /etc/init.d/clash #授予权限 + #设为init.d方式启动 + mv $clashdir/clashservice /etc/init.d/clash + chmod 777 /etc/init.d/clash else [ -d /etc/systemd/system ] && sysdir=/etc/systemd/system [ -d /usr/lib/systemd/system/ ] && sysdir=/usr/lib/systemd/system/ if [ -n "$sysdir" ];then - mv $clashdir/clash.service $sysdir/clash.service #将service服务文件移动到系统目录 - sed -i "s%/etc/clash%${dir}/clash%g" $sysdir/clash.service + #设为systemd方式启动 + mv $clashdir/clash.service $sysdir/clash.service + sed -i "s%/etc/clash%$clashdir%g" $sysdir/clash.service + systemctl daemon-reload + rm -rf /etc/init.d/clash else - #设为保守模式 + #设为保守模式启动 sed -i '/start_old=*/'d $clashdir/mark sed -i "1i\start_old=已开启" $clashdir/mark fi @@ -264,18 +258,35 @@ if [ "$res" = '1' ]; then shtype=sh && [ -n "$(ls -l /bin/sh|grep -o dash)" ] && shtype=bash sed -i "s%#!/bin/sh%#!/bin/$shtype%g" $clashdir/start.sh chmod 777 $clashdir/start.sh - sed -i '/versionsh_l=*/'d $ccfg - sed -i "1i\versionsh_l=$release_new" $ccfg + sed -i '/versionsh_l=*/'d $clashdir/mark + sed -i "1i\versionsh_l=$release_new" $clashdir/mark + #设置环境变量 + sed -i '/alias clash=*/'d /etc/profile + echo "alias clash=\"$shtype $clashdir/clash.sh\"" >> /etc/profile #设置快捷命令环境变量 + sed -i '/export clashdir=*/'d /etc/profile + echo "export clashdir=\"$clashdir\"" >> /etc/profile #设置clash路径环境变量 #删除临时文件 rm -rf /tmp/clashfm.tar.gz - rm -rf /tmp/clashversion + rm -rf $clashdir/clashservice + rm -rf $clashdir/clash.service +} +getsh(){ +echo ----------------------------------------------- +echo -e "当前脚本版本为:\033[33m $versionsh_l \033[0m" +echo -e "最新脚本版本为:\033[32m $release_new \033[0m" +echo ----------------------------------------------- +read -p "是否更新脚本?[1/0] > " res +if [ "$res" = '1' ]; then + tarurl=$update_url/bin/clashfm.tar.gz + #下载更新 + gettar #提示 echo ----------------------------------------------- echo -e "\033[32m管理脚本更新成功!\033[0m" echo ----------------------------------------------- exit; -else -update + else + update fi } getcore(){ diff --git a/scripts/start.sh b/scripts/start.sh index c7321ee..551a5d7 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -198,7 +198,7 @@ exper='experimental: {ignore-resolve-fail: true, interface-name: en0}' #预删除需要添加的项目 i=$(grep -n "^proxies:" $clashdir/config.yaml | head -1 | cut -d ":" -f 1) i=$(($i-1)) - sed -i '1,'$i'd' $clashdir/config.yaml + sed -i "1,${i}d" $clashdir/config.yaml #添加配置 sed -i "1i$mix" $clashdir/config.yaml sed -i "1a$redir" $clashdir/config.yaml @@ -304,12 +304,7 @@ checkcron(){ } daemon(){ checkcron - echo '*/1 * * * * test -z "$(pidof clash)" && /etc/init.d/clash start #clash守护进程' >> $cronpath - chmod 600 $cronpath -} -daemon_old(){ - checkcron - echo '*/1 * * * * test -z "$(pidof clash)" && '"$clashdir/clash -d $clashdir >/dev/null 2>&1 & #clash守护进程" >> $cronpath + echo '*/1 * * * * test -z "$(pidof clash)" && /etc/init.d/clash restart #clash守护进程' >> $cronpath chmod 600 $cronpath } afstart(){ @@ -336,7 +331,7 @@ start) #使用不同方式启动clash服务 if [ "$start_old" = "已开启" ];then $clashdir/clash -d $clashdir >/dev/null 2>&1 & - daemon_old + daemon afstart elif [ -f /etc/rc.common ];then /etc/init.d/clash start @@ -347,7 +342,7 @@ start) stop) #删除守护 checkcron - sed -i /clash守护进程/d $cronpath + sed -i /clash守护进程/d $cronpath >/dev/null 2>&1 #多种方式结束进程 if [ -f /etc/rc.common ];then /etc/init.d/clash stop >/dev/null 2>&1