这是我的代码,它会点击URL并检查URL是否正常工作,并将邮件发送到相应的webadmins
#!/bin/bash
curl -s --head http://myurl | head -n 1 | grep "HTTP/1.[01] [23].." > /dev/null
if [ $? -eq 0 ]
then
url1="myurl2 is working fine"
else
url1="myurl2 is not working"
fi
curl -s --head http://myurl2 | head -n 1 | grep "HTTP/1.[01] [23].." > /dev/null
if [ $? -eq 0 ]
then
url2="myurl is working fine"
else
url2="myurl is not working"
fi
exec 1<>/dev/tcp/127.0.0.1/25
a=$(cat <<"MAILEND"
HELO local.domain.name
MAIL FROM: <send@mydomain.com>
RCPT TO: <recieve@mail2.com>
DATA
From: send@mydomain.com
To: recieve@mail2.com
Subject: test
$url1 $url2.
.
QUIT
.
MAILEND
)
IFS='
'
declare -a b=($a)
for x in "${b[@]}"
do
echo $x
sleep 1
done
我在邮件中得到$url1 $url2
这必须归因于$url1 & $url2
未在行$a
有人可以帮忙吗
让我提一件事“邮件”或“sendmail”邮件在我的域名中发送,因此使用上述方法发送邮件只能正常工作
我期待“myurl正在工作”“myurl2无效”
作为myurl2 httpd服务我已经停止了
谢谢
答案 0 :(得分:1)
替换
cat <<"MAILEND"
与
cat <<MAILEND
将标识符的引号放在“here document”上,向shell发出信号 not 以展开任何变量。 man bash
答案 1 :(得分:1)
这是暂时的,但由于评论不支持代码格式化,请在此处发布此重构。
( cat <<____HERE
From: send@mydomain.com
To: recieve@mail2.com
Subject: test
____HERE
while read label url; do
if curl -s --head "$url" | head -n 1 | grep "HTTP/1.[01] [23].." > /dev/null
then
echo "$label is working fine"
else
echo "$label is broken"
fi
done <<____HERE |
myurl http://myurl2
myurl2 http://myurl
____HERE
) | sendmail -oi -t
我假设标签交叉匹配彼此的URL是无意的和/或偶然的和/或超出我的有限理解。