Shell腳本實現(xiàn)檢測Cygwin最快的鏡像站點
這是一個 shell 腳本,所以首先你需要安裝一個基本的 Cygwin 環(huán)境,當然還有 curl。
原理很簡單,先從 cygwin.com 下載最新的 mirrors.lst 鏡像列表,簡單處理一下后,利用 curl 以此檢測每個站點的連接速度,并將結(jié)果記錄下來,最后再排個序,顯示出最快的幾個站點。
在使用的過程中,我發(fā)現(xiàn)檢測到的最快的 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
}
## 檢查參數(shù)并賦值
_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
}
## 處理參數(shù)
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檢測結(jié)果:"
echo -e $results | sort -n | sed '1d' | head -$mirrors_count
# vim: set expandtab tabstop=4 shiftwidth=4:
相關文章
fedora 23 lvm2格式 根目錄磁盤空間不足 擴容方法
下面小編就為大家?guī)硪黄猣edora 23 lvm2格式 根目錄磁盤空間不足 擴容方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
并發(fā)數(shù)據(jù)庫壓力測試的shell腳本代碼
并發(fā)數(shù)據(jù)庫壓力測試的shell腳本,有需要的朋友可以參考下2013-02-02
linux?文件管理命令之dirname?\?find?\?finds?\?in?\?indir詳解
這篇文章主要介紹了linux文件管理命令之dirname\find\finds\in\indir詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07
Shell實現(xiàn)識別物理cpu個數(shù)、核心數(shù)
這篇文章主要介紹了Shell實現(xiàn)識別物理cpu個數(shù)、核心數(shù),本文還介紹了判斷是否為超線程的功能,需要的朋友可以參考下2014-12-12
shell腳本實現(xiàn)服務器進程監(jiān)控的方法
這篇文章主要介紹了shell腳本實現(xiàn)服務器進程監(jiān)控的方法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2018-04-04
Linux 分區(qū)初始化為物理卷,把物理卷加入卷組的方法
下面小編就為大家?guī)硪黄狶inux 分區(qū)初始化為物理卷,把物理卷加入卷組的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03

