0

以下を使用して、ダウンロード速度テストの結果を出力しています

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

すなわち

10.5MB/秒

私ができるようにしたいのは、結果もエコーすることです。

if speed=>5 MB/s then echo "pass" そうでなければ echo "fail"

したがって、最終的な出力は

パス 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

実際に行う必要があるのは、2、3 の変更だけです。コマンド置換を使用してコマンドの出力をキャプチャする必要があります。

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 の値の右側から pattern の最長一致を取り除き、結果を返すことを意味します。${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 に答える