Ubuntu
用於監控的 Speedtest-CLI 輸出
所以我對 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"
由於您明確使用
gawk
,您可以使用該match()
函式查找模式“Download:
數字Mbit/s
”並提取在字元串中找到的該模式的實際值,如下所示:gawk '{if (match($0,/Download: ([[:digit:]]+\.[[:digit:]]+) Mbit\/s/,a)>0) print a[1]}'
這會
- 確定是否首先找到了該模式,並且
- 將 RegExp 的所有
( ... )
封閉子組放入數組的元素中a
然後您可以從那裡簡單地使用條目 1(因為 RegExp 中只有一個這樣的子組)。