• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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 "$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:

    您可能感兴趣的文章:
    • 自动化下载并检测ftp文件备份的shell脚本
    • 用来检测输入的选项$1是否在PATH中的shell脚本
    • shell脚本实现实时检测文件变更
    • VBS脚本写的Windows硬件检测工具分享
    • Linux Shell脚本实现检测tomcat
    • Shell脚本实现检测进程是否正在运行
    • PowerShell脚本实现检测网络内主机类型
    • 脚本批量检测网站是否存活
    上一篇:Shell脚本中实现更新PHP5
    下一篇:linux下使用ssh远程执行命令批量导出数据库到本地
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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