从变量中删除页面内容:
当我尝试您的命令时,myduration
包含了我在测试中使用的 URL 页面的 HTML 内容以及时间值。通过添加 -s
来抑制进度条,并添加 -o /dev/null
到 curl
的选项中,我能够去掉重定向到 /dev/null
并且只保存时间在 myduration
中。
由于 myduration
的值可能很短,您可以使用 ire_and_curses
所展示的技巧,通常会产生零作为其结果,这将小于您正在测试的 1(请注意,您的日志消息说“6 秒”,但实际上不止)。
更精细的分辨率:
如果您想要进行更精细的分辨率测试,可以使用类似以下技巧将 myduration
乘以 1000:
mult1000 () {
local floor=${1%.*}
[[ $floor = "0" ]] && floor=''
local frac='0000'
[[ $floor != $1 ]] && frac=${1#*.}$frac
echo ${floor}${frac:0:3}
}
编辑:这个版本的mult1000
能正确处理"0.234"、"1"、"2."、"3.5"和"6.789"等值。对于小数位数大于三位的值,无论值是多少,都会将额外的数字截去而不进行四舍五入("1.1119"变成了"1.111")。
采用我上述提到的更改并使用mult1000
脚本(带有自己的时间示例):
myduration=$(curl -s -o /dev/null http://192.168.50.1/mantisbt/view.php?id=1 -w %{time_total}); [[ $(mult1000 $myduration) -gt 3500 ]] && echo "`date +'%y%m%d%H%M%S'` took more than 3.5 seconds to load the page http://192.168.50.1/mantisbt/view.php?id=1 " >> /home/shantanu/speed_report.txt
以下是将其分成多行(并简化)以使其在此答案中更易读的内容:
myduration=$(curl -s -o /dev/null http://example.com -w %{time_total})
[[ $(mult1000 $myduration) -gt 3500 ]] &&
echo "It took more than 3.5 seconds to load thttp://example.com" >> report.txt