Shell脚本实现检测Cygwin最快的镜像站点

所属分类: 脚本专栏 / linux shell 阅读数: 1950
收藏 0 赞 0 分享

这是一个 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 "$1 should be a number"
            exit 1
        fi
    fi
}
 
## 处理参数
while getopts ":t:p:h-:" optval
do
    case "$optval" in
        t)   _assign timeout ${OPTARG} ;;
        p)   _assign mirrors_count ${OPTARG} ;;
        h)   _usage ;;
        "-") echo "Unknown option: '--${OPTARG}'" >&2;            _usage ;;
        ":") echo "Option '-${OPTARG}' requires an argument" >&2; _usage ;;
        "?") echo "Unknown option: '-${OPTARG}'" >&2;             _usage ;;
        ## Should not occur
        *)   echo "Unknown error while processing options" >&2;   _usage ;;
    esac
done
shift $(expr ${OPTIND} - 1)
 
## 检查用户是否安装了 curl
CURL=`which curl 2> /dev/null`
[ -z "$CURL" ] && (echo "Need to install the curl package."; exit 1)
 
## 读取镜像站点
mirrors=`curl --silent http://cygwin.com/mirrors.lst | cut -d';' -f1`
 
## 使用 CURL 依次检测时间
results=''
for mirror in $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: set expandtab tabstop=4 shiftwidth=4:

更多精彩内容其他人还在看

关于ssh连不上问题的解决方法(必看)

下面小编就为大家带来一篇关于ssh连不上问题的解决方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Ubuntu用户之间相互切换方法(推荐)

下面小编就为大家带来一篇Ubuntu用户之间相互切换方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Linux 编程之进程fork()详解及实例

这篇文章主要介绍了Linux 编程之进程fork()详解及实例的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

浅谈安装ORACLE时在Linux上设置内核参数的含义

下面小编就为大家带来一篇浅谈安装ORACLE时在Linux上设置内核参数的含义。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详谈linux中sar的使用方法

下面小编就为大家带来一篇详谈linux中sar的使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

设置Linux系统的空闲等待时间TMOUT的方法

下面小编就为大家带来一篇设置Linux系统的空闲等待时间TMOUT的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

关于Linux反空闲设置的两种方法总结

下面小编就为大家带来一篇关于Linux反空闲设置的两种方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

linux 查找大目录和大文件的方法(推荐)

下面小编就为大家带来一篇linux 查找大目录和大文件的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Linux makefile 和shell文件相互调用实例详解

这篇文章主要介绍了Linux makefile 和shell文件相互调用实例详解的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Windows与Linux共享文件夹互相访问

这篇文章主要介绍了 详解Windows与Linux共享文件夹互相访问的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多