大家好
几天前,我请求社区帮我创建一个脚本。
#!/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。