Я хочу создать сценарий, который контролирует состояние сети (я не знаю, существуют ли какие-либо программы, которые уже делают то, что я хочу сделать еще лучше).
Я только интересуюсь контролем мощности сигнала и скорости передачи устройства, подключенного к точке доступа, и я пытаюсь создать .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 и сигнал) в файл, поэтому файл будет становиться больше со временем.
Способ получить данные, я не знаю то, что было бы, я знаю, что эти данные появляются в командах, которые я поместил выше.
Я хотел бы за сценарий записать время начала (или попросить имя), не перезаписывая старые данные.
Кто-либо мог помочь мне в создании сценария получить то, что я хочу? И другая вещь, как я мог создать таймер? Или сбой этого, кто-то мог сказать мне некоторый инструмент, чтобы сделать что-то? Кто-то знает, что инструмент делает то, что я хочу сделать?
Это должно сделать:
#!/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