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: