0

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

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

IE

10.5 MB/秒

我想做的就是让它也响应一个结果,即

如果速度=>5 MB/s 然后回显“通过”,否则回显“失败”

所以最终输出将是

通过 7 MB/秒

4

2 回答 2

1

添加

| awk ' { if (($1 > 10) && ($2 == "MB/s")) { printf("SPEED IS TOO DAMN HIGH - %s\n", $0); } elif (($1 > 5) && ($2 == "MB/s")) { printf("PASS - %s\n", $0); } else { printf ("FAIL - %s\n", $0); } } '

在命令行的末尾。

于 2013-01-22T10:57:14.793 回答
1

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

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

所以 $( ) 中的命令被执行,它的标准输出被分配给变量 $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 大于您的目标速度。

于 2013-01-22T11:09:26.407 回答