Ubuntu

用於監控的 Speedtest-CLI 輸出

  • February 13, 2020

所以我對 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 中只有一個這樣的子組)。

引用自:https://unix.stackexchange.com/questions/567370