From e54626bc0863e8931931a833ec5250c4c8e100db Mon Sep 17 00:00:00 2001 From: fscarmen <62703343+fscarmen@users.noreply.github.com> Date: Fri, 27 May 2022 01:00:35 +0800 Subject: [PATCH] Update mac.sh --- mac.sh | 94 ++++++++++++++++++++++++++++++---------------------------- 1 file changed, 48 insertions(+), 46 deletions(-) diff --git a/mac.sh b/mac.sh index 2eb784f..79d6daa 100644 --- a/mac.sh +++ b/mac.sh @@ -110,6 +110,8 @@ E[51]="License should be 26 characters, please re-enter WARP+ License. Otherwise C[51]="License 应为26位字符,请重新输入 WARP+ License,没有可回车继续\(剩余\${i}次\):" E[52]="There have been more than \${j} failures. The script is aborted. Feedback: [https://github.com/fscarmen/warp/issues]" C[52]="失败已超过\${j}次,脚本中止,问题反馈:[https://github.com/fscarmen/warp/issues]" +E[53]="The current Teams account is unavailable, automatically switch back to the free account" +C[53]="当前 Teams 账户不可用,自动切换回免费账户" # 自定义字体彩色,read 函数,友道翻译函数 red(){ echo -e "\033[31m\033[01m$1\033[0m"; } @@ -129,15 +131,15 @@ select_language(){ case $(cat /etc/wireguard/language 2>&1) in E ) L=("${E[@]}");; C ) L=("${C[@]}");; * ) L=("${E[@]}") && [[ -z $OPTION ]] && yellow " ${L[0]} " && reading " ${L[3]} " LANGUAGE - [[ $LANGUAGE = 2 ]] && L=C;; + [[ $LANGUAGE = 2 ]] && L=("${C[@]}");; esac } # 帮助说明 -help(){ yellow " ${T[${L}20]} "; } +help(){ yellow " ${L[20]} "; } check_operating_system(){ - sw_vesrs 2>/dev/null | grep -qvi macos && red " ${T[${L}5]} " && exit 1 + sw_vesrs 2>/dev/null | grep -qvi macos && red " ${L[5]} " && exit 1 ARCHITECTURE=$(uname -m | sed s/x86_64/amd64/) } @@ -171,28 +173,28 @@ ip6_info(){ # 由于warp bug,有时候获取不了ip地址,加入刷网络脚本手动运行,并在定时任务加设置 VPS 重启后自动运行,i=当前尝试次数,j=要尝试的次数 net(){ unset IP4 IP6 WAN4 WAN6 COUNTRY4 COUNTRY6 ASNORG4 ASNORG6 WARPSTATUS4 WARPSTATUS6 - [[ ! $(type -P wg-quick) || ! -e /etc/wireguard/wgcf.conf ]] && red " ${T[${L}23]} " && exit 1 + [[ ! $(type -P wg-quick) || ! -e /etc/wireguard/wgcf.conf ]] && red " ${L[23]} " && exit 1 i=1;j=5 - yellow " $(eval echo "${T[${L}24]}")\n $(eval echo "${T[${L}25]}") " + yellow " $(eval echo "${L[24]}")\n $(eval echo "${L[25]}") " sudo wg-quick up wgcf >/dev/null 2>&1 ip4_info; ip6_info until [[ $TRACE4$TRACE6 =~ on|plus ]] do (( i++ )) || true - yellow " $(eval echo "${T[${L}25]}") " + yellow " $(eval echo "${L[25]}") " sudo wg-quick down wgcf >/dev/null 2>&1 sudo wg-quick up wgcf >/dev/null 2>&1 ip4_info; ip6_info if [[ $i = "$j" ]]; then if [[ $LICENSETYPE = 2 ]]; then - unset LICENSETYPE && i=0 && green " ${T[${L}129]} " && + unset LICENSETYPE && i=0 && green " ${L[53]} " && cp -f /etc/wireguard/wgcf-profile.conf /etc/wireguard/wgcf.conf else wg-quick down wgcf >/dev/null 2>&1 - red " $(eval echo "${T[${L}52]}") " && exit 1 + red " $(eval echo "${L[52]}") " && exit 1 fi fi done - green " ${T[${L}26]} " + green " ${L[26]} " [[ $L = C ]] && COUNTRY4=$(translate "$COUNTRY4") [[ $L = C ]] && COUNTRY6=$(translate "$COUNTRY6") [[ $OPTION = [on] ]] && green " IPv4:$WAN4 $WARPSTATUS4 $COUNTRY4 $ASNORG4\n IPv6:$WAN6 $WARPSTATUS6 $COUNTRY6 $ASNORG6 " @@ -200,8 +202,8 @@ net(){ # WARP 开关,先检查是否已安装,再根据当前状态转向相反状态 onoff(){ - ! type -p wg-quick >/dev/null 2>&1 && red " ${T[${L}21]} " && exit 1 - [[ -n $(sudo wg 2>/dev/null) ]] && (wg-quick down wgcf >/dev/null 2>&1; green " ${T[${L}22]} ") || net + ! type -p wg-quick >/dev/null 2>&1 && red " ${L[21]} " && exit 1 + [[ -n $(sudo wg 2>/dev/null) ]] && (wg-quick down wgcf >/dev/null 2>&1; green " ${L[22]} ") || net } # 同步脚本至最新版本 @@ -209,7 +211,7 @@ ver(){ sudo wget -N -P /etc/wireguard https://raw.githubusercontents.com/fscarmen/warp/main/pc/mac.sh sudo chmod +x /etc/wireguard/mac.sh sudo ln -sf /etc/wireguard/mac.sh /usr/local/bin/warp - green " ${T[${L}28]}:$(grep ^VERSION /etc/wireguard/mac.sh | sed "s/.*=//g") ${T[${L}29]}:$(grep "T\[${L}1]" /etc/wireguard/mac.sh | cut -d \" -f2) " || red " ${T[${L}30]} " + green " ${L[28]}:$(grep ^VERSION /etc/wireguard/mac.sh | sed "s/.*=//g") ${L[29]}:$(grep "T\[${L}1]" /etc/wireguard/mac.sh | cut -d \" -f2) " || red " ${L[30]} " exit } @@ -222,7 +224,7 @@ uninstall(){ # 显示卸载结果 ip4_info; [[ $L = C && -n "$COUNTRY4" ]] && COUNTRY4=$(translate "$COUNTRY4") ip6_info; [[ $L = C && -n "$COUNTRY6" ]] && COUNTRY6=$(translate "$COUNTRY6") - green " ${T[${L}4]}\n IPv4:$WAN4 $COUNTRY4 $ASNORG4\n IPv6:$WAN6 $COUNTRY6 $ASNORG6 " + green " ${L[4]}\n IPv4:$WAN4 $COUNTRY4 $ASNORG4\n IPv6:$WAN6 $COUNTRY6 $ASNORG6 " } install(){ @@ -232,25 +234,25 @@ install(){ sudo mkdir -p /etc/wireguard/ >/dev/null 2>&1 # 询问是否有 WARP+ 或 Teams 账户 - [[ -z $LICENSETYPE ]] && yellow " ${T[${L}49]}" && reading " ${T[${L}3]} " LICENSETYPE + [[ -z $LICENSETYPE ]] && yellow " ${L[49]}" && reading " ${L[3]} " LICENSETYPE case $LICENSETYPE in 1 ) input_license;; 2 ) input_url;; esac - [[ -n $LICENSE && -z $NAME ]] && reading " ${T[${L}9]} " NAME + [[ -n $LICENSE && -z $NAME ]] && reading " ${L[9]} " NAME [[ -n $NAME ]] && NAME="${NAME//[[:space:]]/_}" || NAME=${NAME:-'WARP'} # 脚本开始时间 start=$(date +%s) # 安装 brew 和 wireguard-tools - green "\n ${T[${L}10]}\n " + green "\n ${L[10]}\n " ! type -p brew >/dev/null 2>&1 && /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" ! type -p wg >/dev/null 2>&1 && brew install wireguard-tools # 判断 wgcf 的最新版本,如因 github 接口问题未能获取,默认 v2.2.14 - green "\n ${T[${L}11]}\n " + green "\n ${L[11]}\n " latest=$(curl -fsSL "https://api.github.com/repos/ViRb3/wgcf/releases/latest" | grep "tag_name" | head -n 1 | cut -d : -f2 | sed 's/[ \"v,]//g') latest=${latest:-'2.2.14'} [[ ! -e /usr/local/bin/wgcf ]] && sudo curl -o /usr/local/bin/wgcf https://raw.githubusercontents.com/fscarmen/warp/main/wgcf/wgcf_"$latest"_darwin_"$ARCHITECTURE" @@ -269,8 +271,8 @@ install(){ done # 如有 WARP+ 账户,修改 license 并升级 - [[ -n $LICENSE ]] && yellow " \n${T[${L}13]}\n " && sudo sed -i '' "s/license_key.*/license_key = \"$LICENSE\"/g" wgcf-account.toml && - ( wgcf update --name "$NAME" | sudo tee /etc/wireguard/info.log >/dev/null 2>&1 || red " \n${T[${L}14]}\n " ) + [[ -n $LICENSE ]] && yellow " \n${L[13]}\n " && sudo sed -i '' "s/license_key.*/license_key = \"$LICENSE\"/g" wgcf-account.toml && + ( wgcf update --name "$NAME" | sudo tee /etc/wireguard/info.log >/dev/null 2>&1 || red " \n${L[14]}\n " ) # 生成 Wire-Guard 配置文件 (wgcf-profile.conf) sudo wgcf generate >/dev/null 2>&1 @@ -286,12 +288,12 @@ install(){ sudo cp -f wgcf-profile.conf /etc/wireguard/wgcf.conf sudo mv -f wgcf-account.toml wgcf-profile.conf /etc/wireguard >/dev/null 2>&1 sudo mv -f /usr/local/bin/mac.sh /etc/wireguard >/dev/null 2>&1 - sudo ln -sf /etc/wireguard/mac.sh /usr/local/bin/warp && green " ${T[${L}27]} " + sudo ln -sf /etc/wireguard/mac.sh /usr/local/bin/warp && green " ${L[27]} " sudo chmod +x /usr/local/bin/warp echo "$L" | sudo tee /etc/wireguard/language >/dev/null 2>&1 # 自动刷直至成功( warp bug,有时候获取不了ip地址) - green "\n ${T[${L}12]}\n " + green "\n ${L[12]}\n " unset IP4 IP6 WAN4 WAN6 COUNTRY4 COUNTRY6 ASNORG4 ASNORG6 TRACE4 TRACE6 PLUS4 PLUS6 WARPSTATUS4 WARPSTATUS6 net @@ -301,11 +303,11 @@ install(){ green " IPv4:$WAN4 $WARPSTATUS4 $COUNTRY4 $ASNORG4 " green " IPv6:$WAN6 $WARPSTATUS6 $COUNTRY6 $ASNORG6 " grep -sq 'Device name' /etc/wireguard/info.log 2>/dev/null && TYPE='+' || TYPE=' Teams' - [[ $TRACE4$TRACE6 =~ plus ]] && green " $(eval echo "${T[${L}15]}") " && grep -sq 'Device name' /etc/wireguard/info.log && green " $(eval echo "${T[${L}17]}") " - [[ $TRACE4$TRACE6 =~ on ]] && green " $(eval echo "${T[${L}16]}") " + [[ $TRACE4$TRACE6 =~ plus ]] && green " $(eval echo "${L[15]}") " && grep -sq 'Device name' /etc/wireguard/info.log && green " $(eval echo "${L[17]}") " + [[ $TRACE4$TRACE6 =~ on ]] && green " $(eval echo "${L[16]}") " red "\n==============================================================\n" - yellow " ${T[${L}18]}\n " && help - [[ $TRACE4$TRACE6 = offoff ]] && red " ${T[${L}19]} " + yellow " ${L[18]}\n " && help + [[ $TRACE4$TRACE6 = offoff ]] && red " ${L[19]} " # 删除临时文件 rm -f mac.sh wgcf-account.toml wgcf-profile.conf @@ -313,54 +315,54 @@ install(){ # 输入 WARP+ 账户(如有),限制位数为空或者26位以防输入错误 input_license(){ - [[ -z $LICENSE ]] && reading " ${T[${L}50]} " LICENSE + [[ -z $LICENSE ]] && reading " ${L[50]} " LICENSE i=5 until [[ -z $LICENSE || $LICENSE =~ ^[A-Z0-9a-z]{8}-[A-Z0-9a-z]{8}-[A-Z0-9a-z]{8}$ ]] do (( i-- )) || true - [[ $i = 0 ]] && red " ${T[${L}29]} " && exit 1 || reading " $(eval echo "${T[${L}51]}") " LICENSE + [[ $i = 0 ]] && red " ${L[29]} " && exit 1 || reading " $(eval echo "${L[51]}") " LICENSE done - [[ -n $LICENSE && -z $NAME ]] && reading " ${T[${L}43]} " NAME + [[ -n $LICENSE && -z $NAME ]] && reading " ${L[43]} " NAME [[ -n $NAME ]] && NAME="${NAME//[[:space:]]/_}" || NAME=${NAME:-'WARP'} } # 升级 WARP+ 账户(如有),限制位数为空或者26位以防输入错误,WARP interface 可以自定义设备名(不允许字符串间有空格,如遇到将会以_代替) update_license(){ - [[ -z $LICENSE ]] && reading " ${T[${L}41]} " LICENSE + [[ -z $LICENSE ]] && reading " ${L[41]} " LICENSE i=5 until [[ $LICENSE =~ ^[A-Z0-9a-z]{8}-[A-Z0-9a-z]{8}-[A-Z0-9a-z]{8}$ ]] do (( i-- )) || true - [[ $i = 0 ]] && red " ${T[${L}7]} " && exit 1 || reading " $(eval echo "${T[${L}42]}") " LICENSE + [[ $i = 0 ]] && red " ${L[7]} " && exit 1 || reading " $(eval echo "${L[42]}") " LICENSE done - [[ -n $LICENSE && -z $NAME ]] && reading " ${T[${L}43]} " NAME + [[ -n $LICENSE && -z $NAME ]] && reading " ${L[43]} " NAME [[ -n $NAME ]] && NAME="${NAME//[[:space:]]/_}" || NAME=${NAME:-'WARP'} } # 输入 Teams 账户 URL(如有) input_url(){ - [[ -z $URL ]] && reading " ${T[${L}44]} " URL + [[ -z $URL ]] && reading " ${L[44]} " URL URL=${URL:-'https://gist.githubusercontent.com/fscarmen/56aaf02d743551737c9973b8be7a3496/raw/61bf63e68e4e91152545679b8f11c72cac215128/2021.12.21'} TEAMS=$(curl -sSL "$URL" | sed "s/\"/\"/g") PRIVATEKEY=$(expr "$TEAMS" : '.*private_key">\([^<]*\).*') PUBLICKEY=$(expr "$TEAMS" : '.*public_key":"\([^&]*\).*') ADDRESS4=$(expr "$TEAMS" : '.*v4":"\(172[^&]*\).*') ADDRESS6=$(expr "$TEAMS" : '.*v6":"\([^[&]*\).*') - [[ $PRIVATEKEY =~ ^[A-Z0-9a-z/+]{43}=$ ]] && MATCH1=${T[${L}45]} || MATCH1=${T[${L}46]} - [[ $PUBLICKEY =~ ^[A-Z0-9a-z/+]{43}=$ ]] && MATCH2=${T[${L}45]} || MATCH2=${T[${L}46]} - [[ $ADDRESS4 =~ ^172.16.[01].[0-9]{1,3}$ ]] && MATCH3=${T[${L}45]} || MATCH3=${T[${L}46]} - [[ $ADDRESS6 =~ ^fd01(:[0-9a-f]{0,4}){7}$ ]] && MATCH4=${T[${L}45]} || MATCH4=${T[${L}46]} - yellow " $(eval echo "${T[${L}47]}") " && reading " ${T[${L}48]} " CONFIRM + [[ $PRIVATEKEY =~ ^[A-Z0-9a-z/+]{43}=$ ]] && MATCH1=${L[45]} || MATCH1=${L[46]} + [[ $PUBLICKEY =~ ^[A-Z0-9a-z/+]{43}=$ ]] && MATCH2=${L[45]} || MATCH2=${L[46]} + [[ $ADDRESS4 =~ ^172.16.[01].[0-9]{1,3}$ ]] && MATCH3=${L[45]} || MATCH3=${L[46]} + [[ $ADDRESS6 =~ ^fd01(:[0-9a-f]{0,4}){7}$ ]] && MATCH4=${L[45]} || MATCH4=${L[46]} + yellow " $(eval echo "${L[47]}") " && reading " ${L[48]} " CONFIRM } update(){ # 不符合条件的脚本退出 - ! type -p wg-quick >/dev/null 2>&1 && red " ${T[${L}21]} " && exit 1 - [[ ! -e /etc/wireguard/wgcf-account.toml ]] && red " ${T[${L}32]} " && exit 1 - [[ ! -e /etc/wireguard/wgcf.conf ]] && red " ${T[${L}33]} " && exit 1 - ip4_info; [[ $TRACE4 =~ plus ]] && red " ${T[${L}31]} " && exit 1 - ip6_info; [[ $TRACE6 =~ plus ]] && red " ${T[${L}31]} " && exit 1 + ! type -p wg-quick >/dev/null 2>&1 && red " ${L[21]} " && exit 1 + [[ ! -e /etc/wireguard/wgcf-account.toml ]] && red " ${L[32]} " && exit 1 + [[ ! -e /etc/wireguard/wgcf.conf ]] && red " ${L[33]} " && exit 1 + ip4_info; [[ $TRACE4 =~ plus ]] && red " ${L[31]} " && exit 1 + ip6_info; [[ $TRACE6 =~ plus ]] && red " ${L[31]} " && exit 1 # 选择账户升级的类型 - [[ -z $LICENSETYPE ]] && yellow " ${T[${L}34]}" && reading " ${T[${L}3]} " LICENSETYPE + [[ -z $LICENSETYPE ]] && yellow " ${L[34]}" && reading " ${L[3]} " LICENSETYPE case $LICENSETYPE in 1 ) update_license cd /etc/wireguard || exit @@ -371,15 +373,15 @@ update(){ wg-quick down wgcf >/dev/null 2>&1 net [[ $(curl -ks4 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g") = plus || $(curl -ks6 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g") = plus ]] && - green " ${T[${L}35]}\n ${T[${L}36]}:$(grep 'Device name' /etc/wireguard/info.log | awk '{ print $NF }')\n ${T[${L}37]}:$(grep Quota /etc/wireguard/info.log | awk '{ print $(NF-1), $NF }')" ) || red " ${T[${L}38]} ";; + green " ${L[35]}\n ${L[36]}:$(grep 'Device name' /etc/wireguard/info.log | awk '{ print $NF }')\n ${L[37]}:$(grep Quota /etc/wireguard/info.log | awk '{ print $(NF-1), $NF }')" ) || red " ${L[38]} ";; 2 ) input_url [[ $CONFIRM = [Yy] ]] && (echo "$TEAMS" | sudo tee /etc/wireguard/info.log >/dev/null 2>&1 sudo sed -i '' "s#PrivateKey.*#PrivateKey = $PRIVATEKEY#g;s#Address.*32#Address = ${ADDRESS4}/32#g;s#Address.*128#Address = ${ADDRESS6}/128#g;s#PublicKey.*#PublicKey = $PUBLICKEY#g" /etc/wireguard/wgcf.conf wg-quick down wgcf >/dev/null 2>&1; net - [[ $(curl -ks4 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g") = plus || $(curl -ks6 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g") = plus ]] && green " ${T[${L}39]} ");; + [[ $(curl -ks4 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g") = plus || $(curl -ks6 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g") = plus ]] && green " ${L[39]} ");; - * ) red " ${T[${L}40]} [1-2] "; sleep 1; update + * ) red " ${L[40]} [1-2] "; sleep 1; update esac }