fix: declare function & magic value

This commit is contained in:
libm committed 2024-11-26 18:31:21 +08:00
1 parent 65d34fda27
commit fb65e28f2a
5 files changed
+132 -131

No files matched your search

-82
View File
@@ -1,82 +0,0 @@
#!/bin/bash
CLASH_PATH='/etc/clash'
CONFIG_PATH="$CLASH_PATH/config.yaml"
CONFIG_PATH_BAK="${CONFIG_PATH}.bak"
CRONTAB_PATH_1='/var/spool/cron/root'
CRONTAB_PATH_2='/var/spool/cron/crontabs/root'
[ -e $CRONTAB_PATH_1 ] && TARGET_PATH=$CRONTAB_PATH_1
[ -e $CRONTAB_PATH_2 ] && TARGET_PATH=$CRONTAB_PATH_2
function is_valid() {
grep -qs 'port' "$1"
}
# 1url 2output
function download_config() {
agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0'
wget --timeout=3 --tries=1 --no-check-certificate --user-agent="$agent" -O "$2" "$1"
is_valid "$2" ||
curl --connect-timeout 3 \
--retry 1 \
--user-agent "$agent" \
-k -o "$2" "$1"
}
function quit() {
echo "$0" | grep -qs install.sh && exit 1
}
# clash快捷指令
function clashon() {
addr=http://127.0.0.1:7890
export http_proxy=$addr
export https_proxy=$addr
export HTTP_PROXY=$addr
export HTTPS_PROXY=$addr
systemctl start clash && echo 'clash: 已开启代理环境!' || echo 'clash: 启动失败: 执行 "systemctl status clash" 查看日志'
}
function clashoff() {
unset http_proxy
unset https_proxy
unset HTTP_PROXY
unset HTTPS_PROXY
systemctl stop clash && echo 'clash: 已关闭代理环境!' || echo 'clash: 关闭失败: 执行 "systemctl status clash" 查看日志'
}
function clashui() {
# 查询公网ip
# ifconfig.me
# cip.cc
ip=$(curl -s --noproxy "*" ifconfig.me)
cat <<EOF
clash: Web面板:
● 请注意放行 9090 端口
● 地址1:http://$ip:9090/ui
● 地址2:https://clash.razord.top
EOF
}
function clashupdate() {
IS_AUTO=false
URL=""
for arg in "$@"; do
[ "$arg" = "--auto" ] && IS_AUTO=true
[ "${arg:0:4}" = 'http' ] && URL=$arg
done
[ "$URL" = "" ] && echo '错误:请正确填写订阅链接!' && return 1
[ "$IS_AUTO" = true ] && {
grep -qs clashupdate "$TARGET_PATH" || xargs -I {} echo '0 0 */2 * * . /etc/bashrc;clashupdate {}' >>"$TARGET_PATH" <<<"$URL"
echo "clash: 定时任务设置成功!" && return 0
}
cat "$CONFIG_PATH" >"$CONFIG_PATH_BAK"
download_config "$URL" "$CONFIG_PATH"
# shellcheck disable=SC2015
is_valid "$CONFIG_PATH" && {
clashoff && clashon
echo 'clash: 配置更新成功,已重启生效!'
} || {
cat "$CONFIG_PATH_BAK" >"$CONFIG_PATH"
echo '错误:下载失败或配置无效!'
}
}
+18 -32
View File
@@ -1,42 +1,30 @@
#!/bin/bash
# shellcheck disable=SC1091
source clashctl.sh
# shellcheck disable=SC2034
FIRST_CONFIG_PATH='./resource/config.yaml'
CLASH_GZ_PATH='./resource/clash-linux-amd64-v3-2023.08.17.gz'
UI_PATH='./resource/yacd.tar.xz'
source ./script/clashctl.sh
TEMP_CONFIG_PATH='./resource/config.yaml'
TEMP_CLASH_PATH='./resource/clash-linux-amd64-v3-2023.08.17.gz'
TEMP_UI_PATH='./resource/yacd.tar.xz'
# begin
[ "$(whoami)" != root ] && {
echo "警告: 需要root权限!" && quit || return 1
}
[ -d /etc/clash ] && {
echo "clash: 已安装,如需重新安装请先执行卸载脚本" && quit || return 1
_valid_root
[ -d "$CLASH_BASE_PATH" ] && {
echo "clash: 已安装,如需重新安装请先执行卸载脚本" && _quit
}
# shellcheck disable=SC2015
is_valid "$FIRST_CONFIG_PATH" && echo '配置可用√' || {
read -r -p '输入订阅链接:' url
download_config "$url" "$FIRST_CONFIG_PATH"
is_valid "$FIRST_CONFIG_PATH" || (echo "错误:下载失败或配置无效: 自行粘贴配置内容到 ${CONFIG_PATH} 并重新运行" && quit || return 1)
_valid_config "$TEMP_CONFIG_PATH" && echo '✅ 配置可用' || {
read -r -p '输入订阅链接:' URL
_download_config "$URL" "$TEMP_CONFIG_PATH"
_valid_config "$TEMP_CONFIG_PATH" || (echo "❌ 错误:下载失败或配置无效: 请自行粘贴配置内容到 ${TEMP_CONFIG_PATH} 后再执行安装脚本" && _quit)
}
echo -------------------------
gzip -dc "$CLASH_GZ_PATH" >./clash && chmod +x ./clash
/usr/bin/mv -f ./clash /usr/local/bin/clash
# clash配置目录
mkdir -p /etc/clash
tar -xf "$UI_PATH" -C $CLASH_PATH
/bin/cp -f "$FIRST_CONFIG_PATH" $CLASH_PATH
/bin/cp -f ./resource/Country.mmdb $CLASH_PATH
/bin/cp -f clashctl.sh $CLASH_PATH
echo "source $CLASH_PATH/clashctl.sh" >>/etc/bashrc
mkdir -p "$CLASH_BASE_PATH"
gzip -dc "$TEMP_CLASH_PATH" >"$CLASH_BASE_PATH/clash" && chmod +x "$CLASH_BASE_PATH/clash"
tar -xf "$TEMP_UI_PATH" -C "$CLASH_BASE_PATH"
/bin/cp -f "$TEMP_CONFIG_PATH" ./resource/Country.mmdb ./script/* "$CLASH_BASE_PATH"
echo "source $CLASH_BASE_PATH/clashctl.sh" >>/etc/bashrc
# 定时任务:更新配置
# Deprecated 改为手动配置
# echo '0 0 */2 * * . /etc/bashrc;clashupdate url' >>/var/spool/cron/root
# echo '0 0 */2 * * . /etc/bashrc;clashupdate URL' >>/var/spool/cron/root
# 服务配置文件
cat <<EOF >/etc/systemd/system/clash.service
@@ -47,13 +35,11 @@ After=network-online.target
[Service]
Type=simple
Restart=always
ExecStart=/usr/local/bin/clash -d /etc/clash -ext-ui public -ext-ctl 0.0.0.0:9090
ExecStart=${CLASH_BASE_PATH}/clash -d ${CLASH_BASE_PATH} -ext-ui public -ext-ctl 0.0.0.0:9090
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable clash >/dev/null 2>&1 && echo "clash: 设置自启成功!" || echo "clash: 设置自启失败!"
clashon && clashui
+67
View File
@@ -0,0 +1,67 @@
#!/bin/bash
source common.sh
# clash快捷指令
function clashon() {
systemctl start clash && echo 'clash: 已开启代理环境!' \
|| echo 'clash: 启动失败: 执行 "systemctl status clash" 查看日志' || return 1
addr=http://127.0.0.1:7890
export http_proxy=$addr
export https_proxy=$addr
export HTTP_PROXY=$addr
export HTTPS_PROXY=$addr
}
function clashoff() {
systemctl stop clash && echo 'clash: 已关闭代理环境!' \
|| echo 'clash: 关闭失败: 执行 "systemctl status clash" 查看日志' || return 1
unset http_proxy
unset https_proxy
unset HTTP_PROXY
unset HTTPS_PROXY
}
function clashui() {
# 查询公网ip
# ifconfig.me
# cip.cc
PUBLIC_IP="http://$(curl -s --noproxy "*" ifconfig.me):9090/ui"
LOCAL_IP="http://$(ifconfig eth0 | awk 'NR==2{print $2}'):9090/ui"
printf "\n"
printf "╔═══════════════════════════════════════════════╗\n"
printf "║ 😼 Clash Web 面板地址 ║\n"
printf "║═══════════════════════════════════════════════║\n"
printf "║ ║\n"
printf "║ 🔓 请注意放行 9090 端口 ║\n"
printf "║ 🏠 内网:%-30s ║\n" "$LOCAL_IP"
printf "║ 🌍 公网:%-30s ║\n" "$PUBLIC_IP"
printf "║ ☁️ 公共:https://clash.razord.top ║\n"
printf "║ ║\n"
printf "╚═══════════════════════════════════════════════╝\n"
printf "\n"
}
function clashupdate() {
IS_AUTO=false
URL=""
for ARG in "$@"; do
[ "$ARG" = "--auto" ] && IS_AUTO=true
[ "${ARG:0:4}" = 'http' ] && URL=$ARG
done
[ "$URL" = "" ] && echo '错误:请正确填写订阅链接!' && return 1
[ "$IS_AUTO" = true ] && {
grep -qs 'clashupdate' "$CRONTAB_TARGET_PATH" || xARGs -I {} echo '0 0 */2 * * . /etc/bashrc;clashupdate {}' >>"$CRONTAB_TARGET_PATH" <<<"$URL"
echo "clash: 定时任务设置成功!" && return 0
}
cat "$CLASH_CONFIG_PATH" >"$CLASH_CONFIG_BAK_PATH"
_download_config "$URL" "$CLASH_CONFIG_PATH"
# shellcheck disable=SC2015
_valid_config "$CLASH_CONFIG_PATH" && {
clashoff && clashon
echo 'clash: 配置更新成功,已重启生效!'
} || {
cat "$CLASH_CONFIG_BAK_PATH" >"$CLASH_CONFIG_PATH"
echo '错误:下载失败或配置无效!'
}
}
+41
View File
@@ -0,0 +1,41 @@
# shellcheck disable=SC2034
CLASH_BASE_PATH='/etc/clash'
CLASH_CONFIG_PATH="${CLASH_BASE_PATH}/config.yaml"
CLASH_CONFIG_BAK_PATH="${CLASH_CONFIG_PATH}.bak"
CLASH_CRONTAB_CENTOS_PATH='/var/spool/cron/root'
CLASH_CRONTAB_UBUNTU_PATH='/var/spool/cron/crontabs/root'
[ -e $CLASH_CRONTAB_CENTOS_PATH ] && CLASH_CRONTAB_TARGET_PATH=$CLASH_CRONTAB_CENTOS_PATH
[ -e $CLASH_CRONTAB_UBUNTU_PATH ] && CLASH_CRONTAB_TARGET_PATH=$CLASH_CRONTAB_UBUNTU_PATH
# bash执行 $0为脚本执行路径
# source执行 $0为bash
function _quit() {
echo "$0" | grep -qs 'bash' && exec bash || exit 1
}
function _valid_root() {
[ "$(whoami)" != root ] && {
echo "警告: 需要root或sudo权限执行!" && _quit
}
}
function _valid_config() {
grep -qs 'port' "$1"
}
# 1url 2output
function _download_config() {
AGENT='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0'
wget --timeout=3 \
--tries=1 \
--no-check-certificate \
--user-agent="$AGENT" \
-O "$2" \
"$1"
_valid_config "$2" || \
curl --connect-timeout 3 \
--retry 1 \
--user-agent "$AGENT" \
-k -o "$2" \
"$1"
}
+6 -17
View File
@@ -1,32 +1,21 @@
#!/bin/bash
source clashctl.sh
source ./script/clashctl.sh
[ "$(whoami)" != root ] && {
echo "警告: 需要root权限运行!" && quit || return 1
}
_valid_root
[ ! -d /etc/clash ] && {
[ ! -d "$CLASH_BASE_PATH" ] && {
echo "clash: has already been uninstalled"
read -r -p "按 Enter 键退出,按其它键重新清除代理环境:" answer
[ "$answer" == "" ] && {
echo "已退出"
[ "$0" == ./uninstall.sh ] && exit 1 || return 1
} || echo "清除中..."
read -r -p "按 Enter 键退出,按其它键重新清除代理环境:" ANSWER
[ "$ANSWER" = "" ] && _quit || echo "清除中..."
}
clashoff
unset clashon
unset clashoff
unset clashui
# 重载daemon
systemctl stop clash >/dev/null 2>&1
systemctl disable clash >/dev/null 2>&1
rm -f /etc/systemd/system/clash.service
systemctl daemon-reload
rm -rf "$CLASH_PATH"
rm -f /usr/local/bin/clash
rm -rf "$CLASH_BASE_PATH"
sed -i '/clashctl.sh/d' /etc/bashrc
sed -i '/clashupdate/d' "$TARGET_PATH"
echo 'clash: 已卸载,相关配置已清除!'