帮助 - 用于计算 WiFi 速度并保存的命令/脚本

帮助 - 用于计算 WiFi 速度并保存的命令/脚本

大家好

几天前,我请求社区帮我创建一个脚本

#!/bin/bash

date=$(date --iso-8601=seconds)
printf 'TIME (s)\tSIGNAL STRENGTH (dBm)\t\tTxBITRATE (MBit/s)\t\tRxBITRATE (MBit/s)\n' >"$date"
printf '\n' >>"$date"

for ((i=0; i<=120; i=i+1)); do

    iw dev wlan0 station dump | awk -vt=$i '$1=="signal:"{s=$2} $1=="tx"{txb=$3} $1=="tx"{texttx=$5 $6 $7}  $1=="rx"{rxb=$3} $1=="rx"{textrx=$5 $6 $7}  END {printf "%d\t\t\t%d\t\t\t%.1f\t%s\t\t\t%.1f\t%s\n", t, s, txb, texttx, rxb, textrx}' >>"$date"
    sleep 1

done

脚本会生成一个以其启动时间命名的输出文件,如下:


时间 (s) 信号强度 (dBm) TxBITRATE (MBit/s) RxBITRATE (MBit/s)

0 -64 135.0 MCS640MHz 108.0 MCS540MHz

1 -64 135.0 MCS640MHz 108.0 MCS540MHz

2 -66 90.0 MCS440MHz 108.0 MCS540MHz

3 -66 120.0 MCS540MHz 108.0 MCS540MHz

...


该脚本创建了一系列数据列,但我还想添加更多数据。

我想添加传输速率,因为之前的脚本进行了调制,因此是最大速率,但不是瞬间速度。我想修改脚本,以便在另一列中添加传输速度。

我想过通过读取文件 /proc/net/dev 来获取发送的数据包数量

grep "wlan0" /proc/net/dev | awk '$1=="wlan0:"{print $2}'; #rx packages
grep "wlan0" /proc/net/dev | awk '$1=="wlan0:"{print $10}'; #tx packages

我不知道是否还有其他方法可以做得更好。(当然有)

因此,新的脚本应该适应上述内容,在两个时间点读取这些包,减去并除以它们之间的时间,并将其存储在同一个文件的另一列中的主循环的同一行中。

我想要得到的结果如下(或多或少):


时间 (s) 信号强度 (dBm) TxBITRATE (MBit/s) RxBITRATE (MBit/s) TxSpeed (Mbs) RxSpeed (Mbs)

0 -64 135.0 MCS640MHz 108.0 MCS540MHz 1.2 0.3

1 -64 135.0 MCS640MHz 108.0 MCS540MHz 1.5 0.4

2 -66 90.0 MCS440MHz 108.0 MCS540MHz 1.5 0.5

3 -66 120.0 MCS540MHz 108.0 MCS540MHz 2.1 0.5

...


我怎样才能更改必须添加 WiFi 速度的脚本?

提前非常感谢您。

问候。

安东尼奥·G

答案1

大家好,

最后,我创建了一个可以完成我想要的操作的脚本。

当然有一个更简单的解决方案,但这对我来说有效。

如果有人感兴趣的话,我就离开这里了。

#!/bin/bash

date=$(date --iso-8601=seconds)
printf 'TIME (s)\tSIGNAL STRENGTH (dBm)\t\tTxBITRATE (MBit/s)\t\tRxBITRATE (MBit/s)\t\tRxRATE (KB/s)\t\tTxRATE (KB/s)\n' >"$date"
printf '\n' >>"$date"

for ((i=0; i<=120; i=i+1)); do

iw dev wlan0 station dump | awk -vt=$i '$1=="signal:"{s=$2} $1=="tx"{txb=$3} $1=="tx"{texttx=$5 $6 $7}  $1=="rx"{rxb=$3} $1=="rx"{textrx=$5 $6 $7}  END {printf "%d\t\t\t%d\t\t\t%.1f\t%s\t\t\t%.1f\t%s", t, s, txb, texttx, rxb, textrx}' >>"$date"

rx1= grep "wlan0" /proc/net/dev | awk '$1=="wlan0:"{print "1: -" $2}' > "salida1"
tx1= grep "wlan0" /proc/net/dev | awk '$1=="wlan0:"{print "1: -" $10}' > "salida2"
    sleep 1

rx2= grep "wlan0" /proc/net/dev | awk '$1=="wlan0:"{print "2: "$2}' >> "salida1"
tx2= grep "wlan0" /proc/net/dev | awk '$1=="wlan0:"{print "2: "$10}' >> "salida2"

awk '{ sum += $2/1000 } END { printf "\t\t\t"sum}' salida1 >> "$date"
sum=0; 
awk '{ sum += $2/1000 } END { print "\t\t\t"sum}' salida2 >> "$date" 
sum=0;

done

问候,

AntonioG。

相关内容