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[31mfaile[0m" else echo -e "e[32m$timee[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脚本中实现更新PHP5
我很迷恋Shell,很喜欢看着字符在黑色的Console界面中跳跃着,奇怪的是,我居然没有因此成为一个Linux/Unix程序员,而只是个写CGI程序的倒霉蛋。大家都
Shell中使用scp命令实现文件上传代码
自从法现SSH可以执行远端命令后,ftp软件也渐渐很少用了。每次更新服务器代码,都要打包、上传、登录到服务器修改文件权限、更新Cache等等,又慢又
Putty实现自动登陆远程Linux主机的方法
由于工作需要,经常要从Windows主机访问远程的Ubuntu服务器,每次输入账号和老长的密码,感觉很麻烦,于是参考网上的教程简单的设置了一下就能自动