Bash脚本网站测速:time命令结果比较异常问题及解决
Shell脚本检测网站访问速度:TIMEFORMAT数值比较问题及解决方法
问题描述
尝试用Shell脚本检测网站访问速度,通过TIMEFORMAT环境变量获取time命令输出的耗时数值,但在进行数值比较判断时出现异常。初始脚本如下:
#!/bin/bash TIMEFORMAT=%E TOTAL=`time wget -pq --no-cache --delete-after -H https://www.netflix.com 2>&1` echo $TOTAL if [[ "$TOTAL" -gt 0 ]]; then echo 'YES' else echo 'NO' fi
脚本执行后显示耗时为2,119秒,但条件判断始终输出NO。
问题原因
TIMEFORMAT=%E输出的是带逗号的浮点数字符串(逗号是部分locale环境下的小数点分隔符),而bash的-gt属于整数比较运算符,无法识别带逗号的非整数字符串,导致比较逻辑失效,最终判断结果不符合预期。
解决方法
改用记录开始/结束时间戳的方式计算耗时,通过整数时间戳的差值得到整数形式的耗时,即可正常进行数值比较。修正后的脚本如下:
#!/bin/bash start=$(date +%s) time wget -pq --no-cache --delete-after -H https://www.netflix.com 2>&1 end=$(date +%s) total=$(($end-$start)) echo "Elapsed Time: $(($total)) seconds" if [[ $total -gt 1 ]]; then echo 'YES' else echo 'NO' fi
此方法通过date +%s获取当前时间的秒级时间戳,计算差值得到整数耗时,避免了浮点字符串的解析问题,数值比较逻辑可以正常工作。
内容的提问来源于stack exchange,提问作者FireFoxII
相关产品推荐
相关产品推荐

