检查URL并发送到webadmin Bash Script

时间:2014-01-12 07:20:32

标签: bash email

这是我的代码,它会点击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

中替换{{1}}

有人可以帮忙吗

让我提一件事“邮件”或“sendmail”邮件在我的域名中发送,因此使用上述方法发送邮件只能正常工作

我期待“myurl正在工作”“myurl2无效”

作为myurl2 httpd服务我已经停止了

谢谢

2 个答案:

答案 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是无意的和/或偶然的和/或超出我的有限理解。