(转)测试网页响应时间的shell脚本[需要curl支持]

用法及返回结果如下:

lvyaozu@lvyaozu-desktop:~/shell$./requesturl.sh-n20http://www.baidu.com

Requesturl:http://www.baidu.com

Requestnumber:20

RequestFailed:0

——AverageValue——

time_connect:0.1614

time_total:0.1693

time_namelookup:0.0088

————————-

请求参数:

-n 指定发送多少次请求,默认为10

返回结果为 curl -w 选项返回值,以下摘自curl官方文档:

http://curl.haxx.se/docs/manpage.html

time_connect The time, in seconds, it took from the start until the TCP connect to the remote host (or proxy) was completed.

time_totalThetotaltime,inseconds,thatthefulloperationlasted.Thetimewillbedisplayedwithmillisecondresolution.

time_namelookup The time, in seconds, it took from the start until the name resolving was completed.
#!/bin/bash
#requesturl.sh
 
usage="
Usage: $0 [options...] <url>\n
Options:\n
 -h This help text\n
 -n <num> The numbers to request\n
"
if [ $# -lt 1 ]
then
    echo -e $usage
    exit 1
fi
num=10
while getopts "n:h" arg
do
	case $arg in
		n)
			num=$OPTARG
			if [ $num -lt 1 ]
			then
			    num=1
			fi
			;;
		h)
		    echo -e $usage
		    exit 1
		    ;;
		?)
			echo "Unknow argument"
			exit 1
			;;
		esac
done
 
url=$(eval echo "\$$#")
 
if [ "http://" != ${url:0:7} ]
then
    echo "The url need to add the http:// prefix"
    exit 1
fi
 
echo "Request url: "$url
echo "Request number: "$num
 
i=1
while [ $i -le $num ]
do
    c=`curl -o /dev/null -s -w \
        "http_code:%{http_code} time_namelookup:%{time_namelookup} \
        time_connect:%{time_connect} time_total:%{time_total}" $url`
    s=$s$c"\n"
    i=$[$i+1]
done
#echo -e $s
echo -e $s | \
awk '{OFS="\n"}{if($1) for(i=1;i<=NF;i++)print $i}' | \
awk -F: -v num=$num -v failnum=0 \
    '{if($1 != "http_code")result[$1]+=$2;if($1=="http_code" && $2 != 200)failnum++} \
    END{print "Request Failed: " failnum "\n------Average Value------"; \
    for(i in result) {print i ": " result[i]/num;} \
    print "-------------------------"}'
 

相关推荐