我想设置一个警报,如果此输出左侧的一个数字大于 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
以上是我们有线电视厂具有最多 arp 条目(仅限公共 IP)的前 10 个 mac 地址。
例如:底部的 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
确保更改虚拟电子邮件地址。然后,您将收到一封电子邮件,其中包含主题中的行数和正文中的整行。
下面是一个运行示例,我在 mail
命令之前插入了一个echo
$ 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