mirror of https://github.com/lework/script
lework
5 years ago
1 changed files with 135 additions and 0 deletions
@ -0,0 +1,135 @@
@@ -0,0 +1,135 @@
|
||||
#!/bin/env bash |
||||
# |
||||
# lework |
||||
# Os repo mirror site speed test. |
||||
|
||||
|
||||
###################################################################################################### |
||||
# environment configuration |
||||
###################################################################################################### |
||||
|
||||
# Colors |
||||
RED='\033[0;31m' |
||||
GREEN='\033[0;32m' |
||||
YELLOW='\033[0;33m' |
||||
BLUE='\033[0;36m' |
||||
PLAIN='\033[0m' |
||||
|
||||
declare -A mirrors |
||||
mirrors=( |
||||
[edu_sjtu]="http://ftp.sjtu.edu.cn/" |
||||
[edu_ustc]="https://mirrors.ustc.edu.cn/" |
||||
[edu_lzu]="http://mirror.lzu.edu.cn/" |
||||
[edu_bjtu]="https://mirror.bjtu.edu.cn/" |
||||
[edu_bit]="http://mirror.bit.edu.cn/" |
||||
[edu_cqu]="http://mirrors.cqu.edu.cn/" |
||||
[edu_dlut]="http://mirror.dlut.edu.cn/" |
||||
[edu_zju]="http://mirrors.zju.edu.cn/" |
||||
[edu_tsinghua]="https://mirrors.tuna.tsinghua.edu.cn/" |
||||
[sohu]="http://mirrors.sohu.com/" |
||||
[huawei]="https://mirrors.huaweicloud.com/" |
||||
[netease]="http://mirrors.cn99.com/" |
||||
[tencent]="https://mirrors.cloud.tencent.com/" |
||||
[aliyun]="https://mirrors.aliyun.com/" |
||||
) |
||||
|
||||
###################################################################################################### |
||||
# function |
||||
###################################################################################################### |
||||
|
||||
function shutdown() { |
||||
tput cnorm # reset cursor |
||||
} |
||||
|
||||
|
||||
function error() { |
||||
ps -ef | grep "$0" | awk '{print $2}' | xargs kill -9 '{}' >/dev/null 2>&1 |
||||
} |
||||
|
||||
trap shutdown EXIT |
||||
trap error ERR 2 3 |
||||
|
||||
function spinner() { |
||||
# make sure we use non-unicode character type locale |
||||
# (that way it works for any locale as long as the font supports the characters) |
||||
local LC_CTYPE=C |
||||
speed_test "$@" & |
||||
sleep 1 |
||||
|
||||
local pid=$(ps -ef | grep -E '[w]get.*-4O /dev/null -T300' | awk '{print $2}') # Process Id of the previous running command |
||||
|
||||
local spin='◐◓◑◒' |
||||
local charwidth=3 |
||||
|
||||
local i=0 |
||||
tput civis # cursor invisible |
||||
while kill -0 $pid 2>/dev/null; do |
||||
local i=$(((i + $charwidth) % ${#spin})) |
||||
printf "%s" "${spin:$i:$charwidth}" |
||||
|
||||
echo -en "\033[1D" |
||||
sleep .1 |
||||
done |
||||
tput cnorm |
||||
wait |
||||
} |
||||
|
||||
speed_test() { |
||||
local output=$(LANG=C wget ${3:+"--header="}"$3" -4O /dev/null -T300 "$1" 2>&1) |
||||
local speed=$(printf '%s' "$output" | awk '/\/dev\/null/ {speed=$3 $4} END {gsub(/\(|\)/,"",speed); print speed}') |
||||
local ipaddress=$(printf '%s' "$output" | awk -F'|' '/Connecting to .*\|([^\|]+)\|/ {print $2}'| tail -1) |
||||
local time=$(printf '%s' "$output" | awk -F= '/100% / {print $2}') |
||||
local size=$(printf '%s' "$output" | awk '/Length:/ {s=$3} END {gsub(/\(|\)/,"",s); print s}') |
||||
printf "${YELLOW}%-14s${GREEN}%-20s${BLUE}%-14s${PLAIN}%-20s${RED}%-14s${PLAIN}\n" "$2" "${ipaddress}" "${size}" "${time}" "${speed}" |
||||
} |
||||
|
||||
|
||||
###################################################################################################### |
||||
# main |
||||
###################################################################################################### |
||||
|
||||
if [ ! -e '/usr/bin/wget' ]; then |
||||
echo "Error: wget command not found. You must be install wget command at first." |
||||
exit 1 |
||||
fi |
||||
|
||||
if [ ! -e '/usr/bin/curl' ]; then |
||||
echo "Error: curl command not found. You must be install curl command at first." |
||||
exit 1 |
||||
fi |
||||
|
||||
clear |
||||
echo -e "\n\nOs repo mirror site speed test" |
||||
|
||||
os=`cat /etc/*-release | grep '^ID=' | \ |
||||
sed 's/^ID=["]*\([a-zA-Z]*\).*$/\1/' | \ |
||||
tr '[:upper:]' '[:lower:]'` |
||||
|
||||
os=${os:-centos} |
||||
case "$os" in |
||||
centos) |
||||
file="centos/filelist.gz" |
||||
;; |
||||
debian) |
||||
file="/debian/ls-lR.gz" |
||||
;; |
||||
*) |
||||
file="centos/filelist.gz" |
||||
;; |
||||
esac |
||||
|
||||
echo -e "\n[Mirror Site]" |
||||
for mirror in ${!mirrors[*]}; do |
||||
printf "${PLAIN}%-14s${GREEN}%-20s${PLAIN}\n" ${mirror} ": ${mirrors[$mirror]}" |
||||
done |
||||
|
||||
echo -e "\n[Test]" |
||||
echo -e "Test OS : ${YELLOW}${os}${PLAIN}" |
||||
echo -e "Download File : ${YELLOW}${file}${PLAIN}" |
||||
|
||||
echo |
||||
printf "%-14s%-20s%-14s%-20s%-14s\n" "Site Name" "IPv4 address" "File Size" "Download Time" "Download Speed" |
||||
for mirror in ${!mirrors[*]}; do |
||||
spinner "${mirrors[$mirror]}${file}" ${mirror} |
||||
done |
||||
echo |
Loading…
Reference in new issue