From a34eceff21fec188ac7587c090e17d408af6c27a Mon Sep 17 00:00:00 2001 From: fscarmen <62703343+fscarmen@users.noreply.github.com> Date: Sat, 2 Apr 2022 08:05:35 +0800 Subject: [PATCH] Update unlock.sh --- unlock.sh | 270 +++++++++++++++++++++++++++--------------------------- 1 file changed, 135 insertions(+), 135 deletions(-) diff --git a/unlock.sh b/unlock.sh index 3a9a385..2680036 100644 --- a/unlock.sh +++ b/unlock.sh @@ -118,17 +118,17 @@ type -P $c >/dev/null 2>&1 || (yellow " $(eval echo "${T[${L}7]}") " && ${PACKAG # 脚本当天及累计运行次数统计 statistics_of_run-times(){ -COUNT=$(curl -ksm1 "https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fraw.githubusercontent.com%2Ffscarmen%2Fwarp_unlock%2Fmain%2Funlock.sh&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false" 2>&1) && -TODAY=$(expr "$COUNT" : '.*\s\([0-9]\{1,\}\)\s/.*') && TOTAL=$(expr "$COUNT" : '.*/\s\([0-9]\{1,\}\)\s.*') - } + COUNT=$(curl -ksm1 "https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fraw.githubusercontent.com%2Ffscarmen%2Fwarp_unlock%2Fmain%2Funlock.sh&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false" 2>&1) && + TODAY=$(expr "$COUNT" : '.*\s\([0-9]\{1,\}\)\s/.*') && TOTAL=$(expr "$COUNT" : '.*/\s\([0-9]\{1,\}\)\s.*') +} # 选择语言,先判断 /etc/wireguard/language 里的语言选择,没有的话再让用户选择,默认英语 select_laguage(){ -[[ -z "$L" ]] && case $(cat /etc/wireguard/language 2>&1) in -E ) L=E;; C ) L=C;; -* ) L=E && yellow " ${T[${L}0]} " && reading " ${T[${L}3]} " LANGUAGE -[[ $LANGUAGE = 2 ]] && L=C;; -esac + [[ -z "$L" ]] && case $(cat /etc/wireguard/language 2>&1) in + E ) L=E;; C ) L=C;; + * ) L=E && yellow " ${T[${L}0]} " && reading " ${T[${L}3]} " LANGUAGE + [[ $LANGUAGE = 2 ]] && L=C;; + esac } check_system_info(){ @@ -141,19 +141,19 @@ CMD=( "$(grep -i pretty_name /etc/os-release 2>/dev/null | cut -d \" -f2)" "$(grep . /etc/issue 2>/dev/null | cut -d \\ -f1 | sed '/^[ ]*$/d')" ) -for a in "${CMD[@]}"; do - SYS="$a" && [[ -n $SYS ]] && break -done + for a in "${CMD[@]}"; do + SYS="$a" && [[ -n $SYS ]] && break + done -REGEX=("debian" "ubuntu" "centos|red hat|kernel|oracle linux|alma|rocky" "'amazon linux'") -RELEASE=("Debian" "Ubuntu" "CentOS" "CentOS") -PACKAGE_UPDATE=("apt -y update" "apt -y update" "yum -y update" "yum -y update") -PACKAGE_INSTALL=("apt -y install" "apt -y install" "yum -y install" "yum -y install") + REGEX=("debian" "ubuntu" "centos|red hat|kernel|oracle linux|alma|rocky" "'amazon linux'") + RELEASE=("Debian" "Ubuntu" "CentOS" "CentOS") + PACKAGE_UPDATE=("apt -y update" "apt -y update" "yum -y update" "yum -y update") + PACKAGE_INSTALL=("apt -y install" "apt -y install" "yum -y install" "yum -y install") -for ((b=0; b<${#REGEX[@]}; b++)); do - [[ $(echo "$SYS" | tr '[:upper:]' '[:lower:]') =~ ${REGEX[b]} ]] && SYSTEM="${RELEASE[b]}" && [[ -n $SYSTEM ]] && break -done -[[ -z $SYSTEM ]] && red " ${T[${L}5]} " && exit 1 + for ((b=0; b<${#REGEX[@]}; b++)); do + [[ $(echo "$SYS" | tr '[:upper:]' '[:lower:]') =~ ${REGEX[b]} ]] && SYSTEM="${RELEASE[b]}" && [[ -n $SYSTEM ]] && break + done + [[ -z $SYSTEM ]] && red " ${T[${L}5]} " && exit 1 } # 检查解锁是否已运行,如果是则判断模式,以前给更换模式赋值 @@ -170,70 +170,70 @@ check_unlock_running(){ # 判断是否已经安装 WARP 网络接口或者 Socks5 代理,如已经安装组件尝试启动。再分情况作相应处理 check_warp(){ -if [[ -z "${STATUS[@]}" ]]; then - if type -P wg-quick >/dev/null 2>&1; then - [[ -z $(wg 2>/dev/null) ]] && wg-quick up wgcf >/dev/null 2>&1 - TRACE4=$(curl -ks4m8 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g") - TRACE6=$(curl -ks6m8 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g") - [[ $TRACE4 =~ on|plus ]] && STATUS[0]=1 || STATUS[0]=0 - [[ $TRACE6 =~ on|plus ]] && STATUS[1]=1 || STATUS[1]=0 - else STATUS=(0 0) + if [[ -z "${STATUS[@]}" ]]; then + if type -P wg-quick >/dev/null 2>&1; then + [[ -z $(wg 2>/dev/null) ]] && wg-quick up wgcf >/dev/null 2>&1 + TRACE4=$(curl -ks4m8 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g") + TRACE6=$(curl -ks6m8 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g") + [[ $TRACE4 =~ on|plus ]] && STATUS[0]=1 || STATUS[0]=0 + [[ $TRACE6 =~ on|plus ]] && STATUS[1]=1 || STATUS[1]=0 + else STATUS=(0 0) + fi + + type -P warp-cli >/dev/null 2>&1 && [[ ! $(ss -nltp) =~ 'warp-svc' ]] && warp-cli --accept-tos connect >/dev/null 2>&1 + [[ $(ss -nltp) =~ 'warp-svc' ]] && CLIENT_PORT=$(ss -nltp | grep warp-svc | grep -oP '127.0*\S+' | cut -d: -f2) && STATUS[2]=1 || STATUS[2]=0 + + type -P wireproxy >/dev/null 2>&1 && [[ ! $(ss -nltp) =~ 'wireproxy' ]] && systemctl restart wireproxy + [[ $(ss -nltp) =~ 'wireproxy' ]] && WIREPROXY_PORT=$(ss -nltp | grep wireproxy | grep -oP '127.0*\S+' | cut -d: -f2) && STATUS[3]=1 || STATUS[3]=0 fi - type -P warp-cli >/dev/null 2>&1 && [[ ! $(ss -nltp) =~ 'warp-svc' ]] && warp-cli --accept-tos connect >/dev/null 2>&1 - [[ $(ss -nltp) =~ 'warp-svc' ]] && CLIENT_PORT=$(ss -nltp | grep warp-svc | grep -oP '127.0*\S+' | cut -d: -f2) && STATUS[2]=1 || STATUS[2]=0 - - type -P wireproxy >/dev/null 2>&1 && [[ ! $(ss -nltp) =~ 'wireproxy' ]] && systemctl restart wireproxy - [[ $(ss -nltp) =~ 'wireproxy' ]] && WIREPROXY_PORT=$(ss -nltp | grep wireproxy | grep -oP '127.0*\S+' | cut -d: -f2) && STATUS[3]=1 || STATUS[3]=0 -fi - -CASE_IPV4(){ NIC='-ks4m8'; RESTART="wgcf_restart"; } -CASE_IPV6(){ NIC='-ks6m8'; RESTART="wgcf_restart"; } -CASE_CLIENT(){ NIC="-sx socks5h://localhost:$CLIENT_PORT"; RESTART="socks5_restart"; } -CASE_WIREPROXY(){ NIC="-sx socks5h://localhost:$WIREPROXY_PORT"; RESTART="wireproxy_restart"; } - -INSTALL_CHECK=("0 0 0 0" "1 1 1 1" "0 1 1 1" "1 0 1 1" "1 1 0 1" "1 1 1 0" "0 0 1 1" "0 1 0 1" "0 1 1 0" "1 0 0 1" "1 0 1 0" "1 1 0 0" "0 0 0 1" "0 0 1 0" "0 1 0 0" "1 0 0 0") -SHOW=("${T[${L}4]}" "${T[${L}53]}" "${T[${L}47]}" "${T[${L}50]}" "${T[${L}51]}" "${T[${L}52]}" "${T[${L}45]}" "${T[${L}46]}" "${T[${L}6]}" "${T[${L}48]}" "${T[${L}49]}" "${T[${L}23]}") -DO1=("" "CASE_WIREPROXY" "CASE_WIREPROXY" "CASE_WIREPROXY" "CASE_WIREPROXY" "CASE_CLIENT" "CASE_WIREPROXY" "CASE_WIREPROXY" "CASE_CLIENT" "CASE_WIREPROXY" "CASE_CLIENT" "CASE_IPV4" "CASE_WIREPROXY" "CASE_CLIENT" "CASE_IPV6" "CASE_IPV6") -DO2=("" "CASE_CLIENT" "CASE_CLIENT" "CASE_CLIENT" "CASE_IPV4" "CASE_IPV4" "CASE_CLIENT" "CASE_IPV6" "CASE_IPV6" "CASE_IPV4" "CASE_IPV4" "CASE_IPV6") -DO3=("" "CASE_IPV4" "CASE_IPV6" "CASE_IPV4" "CASE_IPV6" "CASE_IPV6") -DO4=("" "CASE_IPV6") -DO1[0]="wget -N https://cdn.jsdelivr.net/gh/fscarmen/warp/menu.sh && bash menu.sh; exit" -DO2[0]="wget -N https://cdn.jsdelivr.net/gh/kkkyg/CFwarp/CFwarp.sh && bash CFwarp.sh; exit" -DO3[0]="bash <(curl -fsSL git.io/warp.sh) menu; exit" -DO4[0]="wget -N https://raw.githubusercontents.com/Misaka-blog/Misaka-WARP-Script/master/misakawarp.sh && bash misakawarp.sh; exit" -DO0[0]="exit" - -for ((f=0; f<${#INSTALL_CHECK[@]}; f++)); do - [[ ${STATUS[@]} = "${INSTALL_CHECK[f]}" ]] && break -done + CASE_IPV4(){ NIC='-ks4m8'; RESTART="wgcf_restart"; } + CASE_IPV6(){ NIC='-ks6m8'; RESTART="wgcf_restart"; } + CASE_CLIENT(){ NIC="-sx socks5h://localhost:$CLIENT_PORT"; RESTART="socks5_restart"; } + CASE_WIREPROXY(){ NIC="-sx socks5h://localhost:$WIREPROXY_PORT"; RESTART="wireproxy_restart"; } + + INSTALL_CHECK=("0 0 0 0" "1 1 1 1" "0 1 1 1" "1 0 1 1" "1 1 0 1" "1 1 1 0" "0 0 1 1" "0 1 0 1" "0 1 1 0" "1 0 0 1" "1 0 1 0" "1 1 0 0" "0 0 0 1" "0 0 1 0" "0 1 0 0" "1 0 0 0") + SHOW=("${T[${L}4]}" "${T[${L}53]}" "${T[${L}47]}" "${T[${L}50]}" "${T[${L}51]}" "${T[${L}52]}" "${T[${L}45]}" "${T[${L}46]}" "${T[${L}6]}" "${T[${L}48]}" "${T[${L}49]}" "${T[${L}23]}") + DO1=("" "CASE_WIREPROXY" "CASE_WIREPROXY" "CASE_WIREPROXY" "CASE_WIREPROXY" "CASE_CLIENT" "CASE_WIREPROXY" "CASE_WIREPROXY" "CASE_CLIENT" "CASE_WIREPROXY" "CASE_CLIENT" "CASE_IPV4" "CASE_WIREPROXY" "CASE_CLIENT" "CASE_IPV6" "CASE_IPV6") + DO2=("" "CASE_CLIENT" "CASE_CLIENT" "CASE_CLIENT" "CASE_IPV4" "CASE_IPV4" "CASE_CLIENT" "CASE_IPV6" "CASE_IPV6" "CASE_IPV4" "CASE_IPV4" "CASE_IPV6") + DO3=("" "CASE_IPV4" "CASE_IPV6" "CASE_IPV4" "CASE_IPV6" "CASE_IPV6") + DO4=("" "CASE_IPV6") + DO1[0]="wget -N https://cdn.jsdelivr.net/gh/fscarmen/warp/menu.sh && bash menu.sh; exit" + DO2[0]="wget -N https://cdn.jsdelivr.net/gh/kkkyg/CFwarp/CFwarp.sh && bash CFwarp.sh; exit" + DO3[0]="bash <(curl -fsSL git.io/warp.sh) menu; exit" + DO4[0]="wget -N https://raw.githubusercontents.com/Misaka-blog/Misaka-WARP-Script/master/misakawarp.sh && bash misakawarp.sh; exit" + DO0[0]="exit" + + for ((f=0; f<${#INSTALL_CHECK[@]}; f++)); do + [[ ${STATUS[@]} = "${INSTALL_CHECK[f]}" ]] && break + done -case "$f" in - 0 ) yellow "${SHOW[f]}" && reading " ${T[${L}3]} " CHOOSE2 - [[ $CHOOSE2 != [0-4] ]] && red " ${T[${L}54]} " && exit 1 || sh -c "$(eval echo \${DO$CHOOSE2[f]})";; - 1 ) yellow "${SHOW[f]}" && reading " ${T[${L}3]} " CHOOSE2 - [[ $CHOOSE2 != [1-4] ]] && red " ${T[${L}54]} " && exit 1 || sh -c "$(eval echo \${DO$CHOOSE2[f]})";; - [2-5] ) yellow "${SHOW[f]}" && reading " ${T[${L}3]} " CHOOSE2 - [[ $CHOOSE2 != [1-3] ]] && red " ${T[${L}54]} " && exit 1 || sh -c "$(eval echo \${DO$CHOOSE2[f]})";; - [6-9]|'10'|'11' ) yellow "${SHOW[f]}" && reading " ${T[${L}3]} " CHOOSE2 - [[ $CHOOSE2 != [1-2] ]] && red " ${T[${L}54]} " && exit 1 || sh -c "$(eval echo \${DO$CHOOSE2[f]})";; - '12'|'13'|'14'|'15' ) sh -c "$(eval echo \${DO$CHOOSE2[f]})";; - * ) red " ${T[${L}54]} " && exit 1;; -esac + case "$f" in + 0 ) yellow "${SHOW[f]}" && reading " ${T[${L}3]} " CHOOSE2 + [[ $CHOOSE2 != [0-4] ]] && red " ${T[${L}54]} " && exit 1 || sh -c "$(eval echo \${DO$CHOOSE2[f]})";; + 1 ) yellow "${SHOW[f]}" && reading " ${T[${L}3]} " CHOOSE2 + [[ $CHOOSE2 != [1-4] ]] && red " ${T[${L}54]} " && exit 1 || $(eval echo \${DO$CHOOSE2[f]});; + [2-5] ) yellow "${SHOW[f]}" && reading " ${T[${L}3]} " CHOOSE2 + [[ $CHOOSE2 != [1-3] ]] && red " ${T[${L}54]} " && exit 1 || $(eval echo \${DO$CHOOSE2[f]});; + [6-9]|'10'|'11' ) yellow "${SHOW[f]}" && reading " ${T[${L}3]} " CHOOSE2 + [[ $CHOOSE2 != [1-2] ]] && red " ${T[${L}54]} " && exit 1 || $(eval echo \${DO$CHOOSE2[f]});; + '12'|'13'|'14'|'15' ) $(eval echo \${DO$CHOOSE2[f]});; + * ) red " ${T[${L}54]} " && exit 1;; + esac } # 期望解锁流媒体, 变量 SUPPORT_NUM 限制选项枚举的次数,不填默认全选, 解锁状态保存在 /etc/wireguard/status.log input_streammedia_unlock(){ -if [[ -z "${STREAM_UNLOCK[@]}" ]]; then - yellow " ${T[${L}15]} " && reading " ${T[${L}3]} " CHOOSE4 - for ((d=0; d<"$SUPPORT_NUM"; d++)); do - ( [[ -z "$CHOOSE4" ]] || echo "$CHOOSE4" | grep -q "$((d+1))" ) && STREAM_UNLOCK[d]='1' || STREAM_UNLOCK[d]='0' - [[ $d = 0 ]] && echo 'null' > /etc/wireguard/status.log || echo 'null' >> /etc/wireguard/status.log - done -fi -UNLOCK_SELECT=$(for ((e=0; e<"$SUPPORT_NUM"; e++)); do - [[ "${STREAM_UNLOCK[e]}" = 1 ]] && echo -e "[[ ! \${R[*]} =~ 'No' ]] && check$e;" || echo -e "#[[ ! \${R[*]} =~ 'No' ]] && check$e;" - done) + if [[ -z "${STREAM_UNLOCK[@]}" ]]; then + yellow " ${T[${L}15]} " && reading " ${T[${L}3]} " CHOOSE4 + for ((d=0; d<"$SUPPORT_NUM"; d++)); do + ( [[ -z "$CHOOSE4" ]] || echo "$CHOOSE4" | grep -q "$((d+1))" ) && STREAM_UNLOCK[d]='1' || STREAM_UNLOCK[d]='0' + [[ $d = 0 ]] && echo 'null' > /etc/wireguard/status.log || echo 'null' >> /etc/wireguard/status.log + done + fi + UNLOCK_SELECT=$(for ((e=0; e<"$SUPPORT_NUM"; e++)); do + [[ "${STREAM_UNLOCK[e]}" = 1 ]] && echo -e "[[ ! \${R[*]} =~ 'No' ]] && check$e;" || echo -e "#[[ ! \${R[*]} =~ 'No' ]] && check$e;" + done) } # 期望解锁地区 @@ -378,24 +378,24 @@ chmod +x /etc/wireguard/warp_unlock.sh # 输出执行结果 result_output(){ -green " $RESULT_OUTPUT " -green " $(eval echo "${T[${L}22]}") " + green " $RESULT_OUTPUT " + green " $(eval echo "${T[${L}22]}") " } # 卸载 uninstall(){ -screen -QX u quit >/dev/null 2>&1 && screen -wipe >/dev/null 2>&1 -type -P wg-quick >/dev/null 2>&1 && systemctl restart wgcf >/dev/null 2>&1 -type -P warp-cli >/dev/null 2>&1 && ( warp-cli --accept-tos delete >/dev/null 2>&1; sleep 1; warp-cli --accept-tos register >/dev/null 2>&1 ) -sed -i '/warp_unlock.sh/d' /etc/crontab -kill -9 $(pgrep -f warp_unlock.sh) >/dev/null 2>&1 -rm -f /etc/wireguard/warp_unlock.sh /root/result.log /etc/wireguard/status.log /etc/systemd/system/warp_unlock.service -systemctl disable --now warp_unlock >/dev/null 2>&1 -pm2 delete warp_unlock >/dev/null 2>&1 -pm2 unstartup systemd >/dev/null 2>&1 - -# 输出执行结果,如是切换模式则不显示 -[ "$UN" = 1 ] && green " ${T[${L}11]} " + screen -QX u quit >/dev/null 2>&1 && screen -wipe >/dev/null 2>&1 + type -P wg-quick >/dev/null 2>&1 && systemctl restart wgcf >/dev/null 2>&1 + type -P warp-cli >/dev/null 2>&1 && ( warp-cli --accept-tos delete >/dev/null 2>&1; sleep 1; warp-cli --accept-tos register >/dev/null 2>&1 ) + sed -i '/warp_unlock.sh/d' /etc/crontab + kill -9 $(pgrep -f warp_unlock.sh) >/dev/null 2>&1 + rm -f /etc/wireguard/warp_unlock.sh /root/result.log /etc/wireguard/status.log /etc/systemd/system/warp_unlock.service + systemctl disable --now warp_unlock >/dev/null 2>&1 + pm2 delete warp_unlock >/dev/null 2>&1 + pm2 unstartup systemd >/dev/null 2>&1 + + # 输出执行结果,如是切换模式则不显示 + [ "$UN" = 1 ] && green " ${T[${L}11]} " } # 传参 1/2 @@ -445,17 +445,17 @@ MODE2=("while true; do" "sleep 1h; done") [ -n "$UNLOCK_MODE_NOW" ] && MENU_SHOW="$(eval echo "${T[${L}19]}")${T[${L}12]}" || MENU_SHOW="${T[${L}12]}" action1(){ -unset MODE2 -[ -n "$UNLOCK_MODE_NOW" ] && uninstall -TASK="sed -i '/warp_unlock.sh/d' /etc/crontab && echo \"*/5 * * * * root bash /etc/wireguard/warp_unlock.sh\" >> /etc/crontab" -RESULT_OUTPUT="${T[${L}10]}" -export_unlock_file -result_output + unset MODE2 + [ -n "$UNLOCK_MODE_NOW" ] && uninstall + TASK="sed -i '/warp_unlock.sh/d' /etc/crontab && echo \"*/5 * * * * root bash /etc/wireguard/warp_unlock.sh\" >> /etc/crontab" + RESULT_OUTPUT="${T[${L}10]}" + export_unlock_file + result_output } action2(){ -[ -n "$UNLOCK_MODE_NOW" ] && uninstall -TASK="cat < /etc/systemd/system/warp_unlock.service + [ -n "$UNLOCK_MODE_NOW" ] && uninstall + TASK="cat < /etc/systemd/system/warp_unlock.service [Unit] Description = WARP unlock After = network.target @@ -468,42 +468,42 @@ Type = simple [Install] WantedBy = multi-user.target EOF" -RESULT_OUTPUT="${T[${L}43]}" -export_unlock_file -systemctl enable --now warp_unlock >/dev/null 2>&1 & -result_output + RESULT_OUTPUT="${T[${L}43]}" + export_unlock_file + systemctl enable --now warp_unlock >/dev/null 2>&1 & + result_output } action3(){ -[ -n "$UNLOCK_MODE_NOW" ] && uninstall -TASK="sed -i '/warp_unlock.sh/d' /etc/crontab && echo \"@reboot root nohup bash /etc/wireguard/warp_unlock.sh &\" >> /etc/crontab" -RESULT_OUTPUT="${T[${L}21]}" -export_unlock_file -nohup bash /etc/wireguard/warp_unlock.sh >/dev/null 2>&1 & -result_output + [ -n "$UNLOCK_MODE_NOW" ] && uninstall + TASK="sed -i '/warp_unlock.sh/d' /etc/crontab && echo \"@reboot root nohup bash /etc/wireguard/warp_unlock.sh &\" >> /etc/crontab" + RESULT_OUTPUT="${T[${L}21]}" + export_unlock_file + nohup bash /etc/wireguard/warp_unlock.sh >/dev/null 2>&1 & + result_output } action4(){ -[ -n "$UNLOCK_MODE_NOW" ] && uninstall -TASK="sed -i '/warp_unlock.sh/d' /etc/crontab && echo \"@reboot root screen -USdm u bash /etc/wireguard/warp_unlock.sh\" >> /etc/crontab" -RESULT_OUTPUT="${T[${L}20]}" -check_dependencies screen -export_unlock_file -screen -USdm u bash /etc/wireguard/warp_unlock.sh -result_output + [ -n "$UNLOCK_MODE_NOW" ] && uninstall + TASK="sed -i '/warp_unlock.sh/d' /etc/crontab && echo \"@reboot root screen -USdm u bash /etc/wireguard/warp_unlock.sh\" >> /etc/crontab" + RESULT_OUTPUT="${T[${L}20]}" + check_dependencies screen + export_unlock_file + screen -USdm u bash /etc/wireguard/warp_unlock.sh + result_output } action5(){ -[ -n "$UNLOCK_MODE_NOW" ] && uninstall -TASK="" -RESULT_OUTPUT="${T[${L}44]}" -node -v >/dev/null 2>&1 || ${PACKAGE_INSTALL[b]} nodejs -npm -v >/dev/null 2>&1 || check_dependencies npm -npm install -g pm2 -export_unlock_file -pm2 start /etc/wireguard/warp_unlock.sh -pm2 save; pm2 startup -result_output + [ -n "$UNLOCK_MODE_NOW" ] && uninstall + TASK="" + RESULT_OUTPUT="${T[${L}44]}" + node -v >/dev/null 2>&1 || ${PACKAGE_INSTALL[b]} nodejs + npm -v >/dev/null 2>&1 || check_dependencies npm + npm install -g pm2 + export_unlock_file + pm2 start /etc/wireguard/warp_unlock.sh + pm2 save; pm2 startup + result_output } action6(){ UN=1; uninstall; } @@ -512,16 +512,16 @@ action0(){ exit 0; } # 菜单显示 menu(){ -clear -yellow " ${T[${L}16]} " -red "======================================================================================================================\n" -green " ${T[${L}17]}:$VERSION ${T[${L}18]}:${T[${L}1]}\n " -red "======================================================================================================================\n" -[[ -z "$CHOOSE1" ]] && yellow " $MENU_SHOW " && reading " ${T[${L}3]} " CHOOSE1 -case "$CHOOSE1" in -[0-6] ) action$CHOOSE1;; -* ) red " ${T[${L}14]} "; sleep 1; menu;; -esac + clear + yellow " ${T[${L}16]} " + red "======================================================================================================================\n" + green " ${T[${L}17]}:$VERSION ${T[${L}18]}:${T[${L}1]}\n " + red "======================================================================================================================\n" + [[ -z "$CHOOSE1" ]] && yellow " $MENU_SHOW " && reading " ${T[${L}3]} " CHOOSE1 + case "$CHOOSE1" in + [0-6] ) action$CHOOSE1;; + * ) red " ${T[${L}14]} "; sleep 1; menu;; + esac } menu