我想创建一个脚本来监视网络状态(我不知道是否已经有任何程序可以更好地完成我想要做的事情)。
我只对监控连接到接入点的设备的信号强度和比特率感兴趣,我正在尝试创建一个 .sh 脚本来执行此操作(例如一分钟),并创建一个输出文件,例如,具有以下格式:
TIME (s) SIGNAL STRENGTH (dBm) BITRATE (Mbit/s)
00 -53 54
05 -50 300
10 -55 54
15 -60 36
可以通过以下命令获取该数据:
$ iw dev wlan1 station dump
Station 12:34:56:78:9a:bc (on wlan0)
inactive time: 304 ms
rx bytes: 18816
rx packets: 75
tx bytes: 5386
tx packets: 21
signal: -29 dBm
tx bitrate: 54.0 MBit/s
或者命令:
$ iw dev wlan0 link
Connected to 04:21:b0:e8:c8:8b (on wlan0)
SSID: attwifi
freq: 2437
RX: 2272 bytes (18 packets)
TX: 232 bytes (3 packets)
signal: -57 dBm
tx bitrate: 36.0 MBit/s
我不知道我是否解释清楚了这一点,我想以某种方式获取这些数据并将其保存在文件中(例如 .txt)。我想定期将我需要的数据(Tx 比特率和信号)写入文件,因此文件会随着时间的推移而变大。
我不知道获取数据的方式是什么,但我知道这些数据出现在我上面输入的命令中。
我希望脚本记录开始时间(或询问名称)而不覆盖旧数据。
有人能帮我创建一个脚本来得到我想要的东西吗?还有,我该如何创建计时器?或者如果做不到,有人能告诉我一些工具来做某事吗?有人知道一个工具可以做我想做的事情吗?
答案1
这应该可以做到:
#!/bin/bash
printf '%s\nTIME (s)\tSIGNAL STRENGTH (dBm)\tBITRATE (MBit/s)\n' "$(date --iso-8601=seconds)" >>log
for ((i=0; i<=60; i=i+5)); do
iw dev wlp3s0f0 station dump | awk -vt=$i '$1=="signal:"{s=$2} $2=="bitrate:"{b=$3} END {printf "%d\t%d\t%.1f\n", t, s, b}' >>log
sleep 5
done
它将把当前时间以 ISO 8601 格式附加到当前工作目录中命名的文件中,后跟该标题,然后每 5 秒将该格式log
的相关输出附加到该文件,持续 60 秒。iw dev wlan1 station dump
在我的计算机上运行的示例:
% bash script.sh
^C
% cat log
2016-03-29T20:00:22+0200
TIME (s) SIGNAL STRENGTH (dBm) BITRATE (MBit/s)
0 63 54.0
5 40 54.0
10 63 54.0
要打印 RX 比特率:
#!/bin/bash
printf '%s\nTIME (s)\tSIGNAL STRENGTH (dBm)\tTX BITRATE (MBit/s)\tRX BITRATE (MBit/s)\n' "$(date --iso-8601=seconds)" >>log
for ((i=0; i<=60; i=i+5)); do
iw dev wlp3s0f0 station dump | awk -vt=$i '$1=="signal:"{s=$2} $1="tx"&&$2=="bitrate:"{tb=$3} $1="rx"&&$2=="bitrate:"{rb=$3} END {printf "%d\t%d\t%.1f\t%.1f\n", t, s, tb, rb}' >>log
sleep 5
done