だから私はLinuxに初めて触れ、何をすべきかわかりません。
だから私は私たちの監視ツールに有用な結果を提供したいと思いますspeedtest-cli
。さまざまな場所でダウンロードとアップロードの速度を監視する必要があります。
awkを使用して出力を中断し、必要な数字を提供する次のスクリプトを作成しました(この場合は数字自体のみがあり、数字の前後にテキストはありません)。
SP=$(speedtest-cli 2>&1)
if [ $? -eq 0 ]
then
Down=$(echo $SP | gawk '{split($0,a,":"); print a[3]}' | \
gawk '{split($0,a," "); print a[1]}')
fi
echo "$Down"
このスクリプトは私が望む方法で動作します。しかし、私は本当に数字だけを返す解決策がほしいと思います。では、「ダウンロード:90.00 Mbit/s」行を検索して90.00を求めて出力することは可能ですか?
編集する:
私が書いたシナリオに興味がある人のために。出力<WAN_IP>,<Download>,<Upload>
、何も接続されていない場合は出力0.0.0.0,0,0
#!/bin/sh
SP=$(speedtest-cli 2>&1)
if [ $? -eq 0 ]
then
From=$(echo "$SP" | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b")
Down=$(echo "$SP" | gawk '{if (match($0,/Download: ([[:digit:]]+\.[[:digit:]]+) Mbit\/s/,a)>0) print a[1]}')
Up=$(echo "$SP" | gawk '{if (match ($0,/Upload: ([[:digit:]]+\.[[:digit:]]+) Mbit\/s/,a)>0) print a[1]}')
else
From="0.0.0.0"
Down="0"
Up="0"
fi
echo "$From,$Down,$Up"
答え1
明示的に使用しているので、関数を使用して "number"パターンを見つけ、次のように文字列で見つかったそのパターンの実際の値を抽出できますgawk
。match()
Download:
Mbit/s
gawk '{if (match($0,/Download: ([[:digit:]]+\.[[:digit:]]+) Mbit\/s/,a)>0) print a[1]}'
これは
- パターンが最初に見つかったことを確認し、
( ... )
RegExpのすべての埋め込みサブグループを配列要素に配置します。a
その後、単にアイテム1を使用できます(RegExpにはそのサブグループが1つしかないため)。
答え2
speedtest-cli
--simple
出力を簡単にするスイッチがあります(speedtest-cli --help
詳細についてはこちらをご覧ください)。
# speedtest-cli --simple --no-upload
Ping: 18.833 ms
Download: 33.88 Mbit/s
Upload: 0.00 Mbit/s
したがって、ダウンロードのみの速度を数値形式で取得できます。
# speedtest-cli --simple --no-upload|grep "^Download:"|cut -d" " -f2
34.92
これにより、--no-upload
アップロード速度をテストせずgrep
にダウンロードラインのみを抽出し、cut
Mbit / s単位の数字である2番目のフィールドを抽出して時間を節約できます。