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

 更新时间:2015年04月03日 10:24:35   投稿:junjie  
这篇文章主要介绍了Shell脚本实现检测Cygwin最快的镜像站点,本文的原理和脚本也可适用其它软件比如apache、nginx等开源软件,需要的朋友可以参考下

这是一个 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:

相关文章

  • 利用shell命令删除指定的文件的方法

    利用shell命令删除指定的文件的方法

    本文主要介绍了利用shell命令删除指定的文件的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Shell中的变量使用小结

    Shell中的变量使用小结

    这篇文章主要介绍了Shell中的变量使用小结,本文总结了变量的语法、常见使用形式等内容,并分别给出代码示例,需要的朋友可以参考下
    2015-05-05
  • 一个ping检测告警函数代码

    一个ping检测告警函数代码

    一个ping脚本,服务器通用告警函数。在没有 nagios 的情况下,这个暂且可以用来作为服务器告警使用
    2013-02-02
  • 几个常用的Linux操作系统监控脚本代码

    几个常用的Linux操作系统监控脚本代码

    本文介绍了几个常用的Linux监控脚本,可以实现主机网卡流量、系统状况、主机磁盘空间、CPU和内存的使用情况等方面的自动监控与报警。根据自己的需求写出的shell脚本更能满足需求,更能细化主机监控的全面性
    2013-07-07
  • 一个简单的linux命令 tail

    一个简单的linux命令 tail

    这篇文章主要介绍了一个简单的linux命令tail,tail命令用来从指定点开始将文件写到标准输出,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 普通用户启动supervisor报HTTP错误(strace)解决分析

    普通用户启动supervisor报HTTP错误(strace)解决分析

    这篇文章主要为大家介绍了普通用户启动supervisor报HTTP错误strace的问题解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Shell交互批量更改主机名的方法

    Shell交互批量更改主机名的方法

    大家可能会遇到这种情况,需要批量修改主机名和同步hosts文件到多台主机,例如新购置了一批云服务器等,可能主机名称上并不能满足你的命名规则或规范,但如果一台台去更改可能就太慢又无聊,所以shell脚本绝对是你的最佳选择。下面看看Shell批量更改主机名的方法。
    2016-12-12
  • Git代码提交流程及git命令汇总(基础篇)

    Git代码提交流程及git命令汇总(基础篇)

    git 现在的火爆程度非同一般,它被广泛地用在大型开源项目,团队开发,以及独立开发者,甚至学生之中。这篇文章给大家介绍一些Git代码提交流程和Git基础命令的使用,需要的朋友参考下吧
    2017-12-12
  • 使用SHC对Shell脚本进行封装和源码隐藏的方法

    使用SHC对Shell脚本进行封装和源码隐藏的方法

    shc是一个由C语言编写的Shell脚本加密程序,它可以将你的脚本编译成二进制可执行文件,从而隐藏源码,这篇文章主要介绍了如何使用SHC对Shell脚本进行封装和源码隐藏,需要的朋友可以参考下
    2023-10-10
  • Linux Bash脚本中的IFS的作用

    Linux Bash脚本中的IFS的作用

    ​​在处理文本数据时,Bash 将文本分割成多个字段,这些字段之间由 IFS 指定的字符进行分隔,本文主要介绍了Linux Bash脚本中的IFS的作用,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05

最新评论