Создание оповещений по электронной почте на основе порогов в Bash [закрыто

StackOverflow https://stackoverflow.com/questions/19823991

Вопрос

Я хотел бы настроить предупреждение, которое активирует и отправляет электронное письмо, если одно из чисел в левой стороне этого вывода выше 25.

Вывод, который я теку, получаю от моего сценария Bash:

  3 00:05:00:E7:5A:EA
  3 00:0C:85:F2:F8:4E
  3 00:11:92:21:87:14
  3 00:17:C5:69:49:A1
  3 00:1A:E3:8C:E4:1A
  3 00:1D:A2:E7:BC:24
  3 00:26:98:14:91:05
  3 44:03:A7:C0:0D:26
 13 C0:62:6B:AE:6A:5D
 26 E8:B7:48:36:8C:AE

Выше приведены 10 лучших MAC -адресов с большинством записей ARP (только публичные IPS) с нашей кабельной установки.

Например: Нижний MAC -адрес составляет 26, что должно запустить и предупреждение по электронной почте, которое отправляет мне предмет «оповещения: действительная информация здесь»

Степень моей способности к сценарию Bash - это в основном группы команд, поэтому мне понадобится реальная помощь с этим.

Это было полезно?

Решение

Вы можете попробовать следующий сценарий:

#!/bin/bash

msg=
count=0
while read line; do
    read freq mac <<< $line
    if (( $freq > 25 )) ; then 
        (( count ++ ))
        msg="$msg$line"$'\n'
    fi
done 
mail your@email.com -s "Alert: $count mac with more than 25 entries" <<< $msg

Перенаправить выход из вашего сценария на стандартный вход этого сценария (обычно с помощью трубы |): your_script.sh | the_above_script.sh

Обязательно измените фиктивный адрес электронной почты. Затем вы получите электронное письмо с подсчетом линий в теме и полными линиями в теле.

Вот пример прогона, в котором я вставил echo прямо перед mail командование

$ cat message
  3 00:05:00:E7:5A:EA
  3 00:0C:85:F2:F8:4E
  3 00:11:92:21:87:14
  3 00:17:C5:69:49:A1
  3 00:1A:E3:8C:E4:1A
  3 00:1D:A2:E7:BC:24
  3 00:26:98:14:91:05
  3 44:03:A7:C0:0D:26
 13 C0:62:6B:AE:6A:5D
 26 E8:B7:48:36:8C:AE
$ ./t.sh < message
mail your@email.com -s Alert: 1 mac with more than 25 entries <<< 26 E8:B7:48:36:8C:AE

Если вы можете использовать awk, вот более короткое решение

< message.txt awk '{ if ($1>25) exit 1 }'  ||  mailx -s "Random Subject" myemail@mydomain.com < message.txt
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top