Shell脚本实现检测Cygwin最快的镜像站点
这是一个shell脚本,所以首先你需要安装一个基本的Cygwin环境,当然还有curl。
原理很简单,先从cygwin.com下载最新的mirrors.lst镜像列表,简单处理一下后,利用curl以此检测每个站点的连接速度,并将结果记录下来,最后再排个序,显示出最快的几个站点。
在使用的过程中,我发现检测到的最快的mirror,实际上使用速度并不一定是最快的,这可能和服务器有关系,毕竟curl检测的时间只是读取mirror首页的时间。不过每个mirror一般都有两组服务器——http&ftp,如果其中一个速度不怎么样,那么可以选择另外一个试试看。
#!/bin/sh
#cygwin-mirrors.sh
#该脚本用于查找Cygwin的最快镜像
timeout=5 #超时时间
mirrors_count=5 #显示最快的几个镜像
PROG=`basename$0` #程序名称
##显示usage
_usage(){
echo"Usage:${PROG}[-t<timeout>][-p<mirrors_count>][-h]"
exit
}
##检查参数并赋值
_assign(){
if["$1"=="timeout"-o"$1"=="mirrors_count"];then
if[["$2"=~^[[:digit:]]+$]];then
let$1=$2
else
echo"$1shouldbeanumber"
exit1
fi
fi
}
##处理参数
whilegetopts":t:p:h-:"optval
do
case"$optval"in
t) _assigntimeout${OPTARG};;
p) _assignmirrors_count${OPTARG};;
h) _usage;;
"-")echo"Unknownoption:'--${OPTARG}'">&2; _usage;;
":")echo"Option'-${OPTARG}'requiresanargument">&2;_usage;;
"?")echo"Unknownoption:'-${OPTARG}'">&2; _usage;;
##Shouldnotoccur
*) echo"Unknownerrorwhileprocessingoptions">&2; _usage;;
esac
done
shift$(expr${OPTIND}-1)
##检查用户是否安装了curl
CURL=`whichcurl2>/dev/null`
[-z"$CURL"]&&(echo"Needtoinstallthecurlpackage.";exit1)
##读取镜像站点
mirrors=`curl--silenthttp://cygwin.com/mirrors.lst|cut-d';'-f1`
##使用CURL依次检测时间
results=''
formirrorin$mirrors;do
echo-n"Checking${mirror}..."
time=`curl-m$timeout-s-o/dev/null-w%{time_total}$mirror`
if["$time"="0.000"];then
echo-e"\e[31mfail\e[0m"
else
echo-e"\e[32m$time\e[0m"
results="${results}\e[32m${time}\e[0m-${mirror}\n"
fi
done
echo-e"\n检测结果:"
echo-e$results|sort-n|sed'1d'|head-$mirrors_count
#vim:setexpandtabtabstop=4shiftwidth=4: