wget速度结果为通过或失败

时间:2013-01-22 10:41:52

标签: linux bash wget

我正在使用以下内容输出下载速度测试的结果

get -O /dev/null http://ipv4.download.thinkbroadband.com/10MB.zip 2>&1 | grep --only-matching '\([0-9.]\+ [KM]B/s\)'

10.5 MB / s

我希望能够做的就是回应结果,即

如果speed => 5 MB / s则回显“通过”否则回显“失败”

所以最终输出将是

通过7 MB / s

1 个答案:

答案 0 :(得分:1)

真的需要做一些改变。您需要使用命令替换来捕获命令的输出:

speed=$( wget -O /dev/null http://ipv4.download.thinkbroadband.com/10MB.zip 2>&1 | grep --only-matching '\([0-9.]\+ [KM]B/s\)' )

因此$()中的命令被执行,并且它的stdout被赋值给变量$ speed。

root@host$ speed=$( wget -O /dev/null http://ipv4.download.thinkbroadband.com/10MB.zip 2>&1 | grep --only-matching '\([0-9.]\+ [KM]B/s\)' )
root@host$ echo $speed
5.50 MB/s

现在我们只需要将速度与目标进行比较。但单位可能会导致问题所以:

root@host$ val=${speed%% *}
root@host$ echo $val
5.50
root@host$ units=${speed##* }
root@host$ echo $units
MB/s

构造$ {var %% pattern}意味着从var值的右侧剥离模式的最长匹配并返回结果。 $ {var ## patter}的功能相同,但是从左侧开始。

所以现在我们可以继续检查

root@host$ if [[ ${units} == "MB/s" && $val > "5.0" ]]; then 
> echo "PASS $speed"
> else
> echo "FAIL $speed"
> fi
PASS 5.50 MB/s
root@host$

所以在这里我们确保我们以MB / s为单位然后确保val大于你的目标速度。