Простой сценарий для контроля состояния беспроводного соединения

Я хочу создать сценарий, который контролирует состояние сети (я не знаю, существуют ли какие-либо программы, которые уже делают то, что я хочу сделать еще лучше).

Я только интересуюсь контролем мощности сигнала и скорости передачи устройства, подключенного к точке доступа, и я пытаюсь создать .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 и сигнал) в файл, поэтому файл будет становиться больше со временем.

Способ получить данные, я не знаю то, что было бы, я знаю, что эти данные появляются в командах, которые я поместил выше.

Я хотел бы за сценарий записать время начала (или попросить имя), не перезаписывая старые данные.

Кто-либо мог помочь мне в создании сценария получить то, что я хочу? И другая вещь, как я мог создать таймер? Или сбой этого, кто-то мог сказать мне некоторый инструмент, чтобы сделать что-то? Кто-то знает, что инструмент делает то, что я хочу сделать?

2
задан 29 March 2016 в 20:56

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, сопровождаемом тем заголовком в файл, названный log в текущем рабочем каталоге, и добавит соответствующий вывод iw dev wlan1 station dump в том формате к нему каждые 5 секунд, в течение 60 секунд.

Образец работает на моей машине:

% 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
0
ответ дан 2 December 2019 в 23:11

Другие вопросы по тегам:

Похожие вопросы: