Mailx不以bash脚本发送电子邮件

时间:2018-01-13 06:16:43

标签: linux bash email

我有这个脚本我正在工作,但似乎无法让它发送电子邮件。我有一个bash调试,但脚本似乎没有执行mail命令。任何帮助将不胜感激。我将电子邮件变量设置为

echo "Please enter email address"
read -r var2

我将电子邮件变量设置为

EMAIL="$var2"

该脚本创建了cat使用的日志文件,它似乎做了我需要的所有“除了”发送电子邮件。完成工作的部分如下。

while true;
do
cat ip_monitor_list.txt | while read IP
do
fping -c 1 -q "$IP" > /dev/null
if [ $? -eq 0 ]; then
STATUS=$(cat $LOG."$IP")
if [ "$STATUS" != "$IP-UP!" ]; then
echo "$(date): ping OK, $IP host is UP!" |
mail -s "$IP host is UP!" "$EMAIL"
fi
echo "$IP-UP!" > $LOG.$IP

我还有一个“else语句与上面的内容非常类似,但如果它已经关闭也会做同样的事情。我注意到我是否只是在终端linux $ mail -s中输入它来尝试邮件命令”主题“myemail@blah.com,它有效。但如果我将下面的内容直接粘贴在终端下面

echo "$(date): ping Failed, $IP host is DOWN!" | mail -s "$IP host is DOWN!" myemail@blah.com

我得到-bash:!“:找不到事件

再次感谢您的帮助,我非常感谢。

以下是完整版的更新版本。

#!/bin/bash
exec 5> debug_output.txt
BASH_XTRACEFD="5"
PS4='$line0: '
set -x
trap "exit" INT
echo "Please enter time in seconds:"
read -r var1
echo "Please enter email address"
read -r var2
LOG=mylog.log
SECONDS="$var1"
EMAIL="$var2"
#Array to write IP's pasted to ip_monitor_list.txt file.
arrIP=()
echo "Enter the IP addresses here enter and Ctrl-d when finished  :"
while read IP
do
arrIPAddress+=($IP)
echo "$IP" >> ip_monitor_list.txt
echo "$IP-UP\!" > $LOG.$IP
done
while true;
do
cat ip_monitor_list.txt | while read IP
do
fping -c 1 -q "$IP" > /dev/null
if [ $? -eq 0 ]; then
STATUS=$(cat $LOG."$IP")
if [ "$STATUS" != "$IP-UP\!" ]; then
echo "$(date): ping OK, $IP host is UP\!" |
mail -s "$IP host is UP\!" "$EMAIL"
fi
echo "$IP-UP\!" > $LOG.$IP
else
STATUS=$(cat $LOG."$IP")
if [ "$STATUS" != "$IP-DOWN\!" ]; then
echo "$(date): ping Failed, $IP host is DOWN\!" |
mail -s "$IP host is DOWN\!" "$EMAIL"
fi
echo "$IP-DOWN\!" > $LOG.$IP
fi
done
sleep $SECONDS
DONE
#File cleanup
rm ip_monitor_list.txt

0 个答案:

没有答案