监控无线状态的简单脚本

监控无线状态的简单脚本

我想创建一个脚本来监视网络状态(我不知道是否已经有任何程序可以更好地完成我想要做的事情)。

我只对监控连接到接入点的设备的信号强度和比特率感兴趣,我正在尝试创建一个 .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

相关内容