最近单位要求写一个关于CURL用法的简单的SHELL.要求可以定制打印需要的输出项目,并且可
以对输出的内容进行自动的MAIL.乍一看,第一个定制打印还是很容易的.无非就是对HEADER里
面的信息进行GREP就OK了.不过,因为需要定制,所以打印时候难免就需要参数的组合打印.这
就需要getopts的结合使用了.赶紧翻翻书,看看用法.基本就搞定了第一个问题.
而自动MAIL的时候就出现了一个没有意想的问题.由于LINUX本机的命令mail程序需要MTA来
支持,所以简单的配置了下SENDMAIL,看看PORT 25也正常.发个信试下,发现机器内部可以发
送,但是无非向对外的MTA发送MAIL(原因为-FQDN不全,而被远端的MTA拒绝.)这下可难办
了.赶紧寻求高人指点,拔山涉水的,最后找到了宇航.给了我一段perl的代码.还真是不
赖.mail发送问题就此搞定,还不需要本地的MTA.真是爽~赶紧把写完的代码进行下总结
以同大家分享.
程序
mail.sh########curl分析脚本(主程序)
mail.pl########perl mail发送脚本
1 mail.shu7nLinux联盟
#!/bin/bashu7nLinux联盟
#file mail.shu7nLinux联盟
#version v1.1u7nLinux联盟
#by IORIu7nLinux联盟
#last modify 2007-11-5 14:40u7nLinux联盟
#relation program mail.pl
u7nLinux联盟
#cat header|sed 's/ *//g' > header.oku7nLinux联盟
#rm -f header header.ok
##################HELP INFO#########################################u7nLinux联盟
help()u7nLinux联盟
{u7nLinux联盟
echo "usage $0 -<[D|L|T|M|C|X|A] -E<mail>> <http://TEST_URL>"u7nLinux联盟
echo "-E Receive Mail"u7nLinux联盟
echo "-D print Date"u7nLinux联盟
echo "-L print Content-Length"u7nLinux联盟
echo "-T print Content-Type"u7nLinux联盟
echo "-M print Last-Modified"u7nLinux联盟
echo "-C print Content-Encoding|vary"u7nLinux联盟
echo "-X print X-Cache|Powered-by-chinacache"u7nLinux联盟
echo "-A print ALL"u7nLinux联盟
}u7nLinux联盟
####################################################################
##############TEST PARAMETER######################################u7nLinux联盟
if [ $# == 0 ];thenu7nLinux联盟
helpu7nLinux联盟
exit 1u7nLinux联盟
fiu7nLinux联盟
###################################################################
####################################################################u7nLinux联盟
tmp=$@u7nLinux联盟
URL1=`echo $tmp | awk '{print $NF}'`
if [ ! `echo $URL1|grep -i -E "^http"` ];thenu7nLinux联盟
URL=`echo "http://$URL1"`u7nLinux联盟
elseu7nLinux联盟
URL=$URL1u7nLinux联盟
fiu7nLinux联盟
####################################################################
####################MAIN PROGRAM#######################################
echo -n "are you sure compressed?(y/n)"u7nLinux联盟
read OPTu7nLinux联盟
case $OPT inu7nLinux联盟
Y|y) /usr/bin/curl -D header -s -m 10 -compressed -o /dev/null $URLu7nLinux联盟
;;u7nLinux联盟
N|n) /usr/bin/curl -D header -s -m 10 -o /dev/null $URLu7nLinux联盟
;;u7nLinux联盟
\?) echo "The option is exist"u7nLinux联盟
exit 1u7nLinux联盟
;;u7nLinux联盟
esac
if [ -f header ];thenu7nLinux联盟
cp -f header header.oku7nLinux联盟
elseu7nLinux联盟
echo "header isn't exist plese you check"u7nLinux联盟
exit 1u7nLinux联盟
fi
u7nLinux联盟
HTTP=`awk '/HTTP|http/ {print $2}' header.ok`
if [ $HTTP == "200" ]||[ $HTTP == "302" ];u7nLinux联盟
thenu7nLinux联盟
rm -f contentu7nLinux联盟
send=0 u7nLinux联盟
use=0u7nLinux联盟
#echo "==============================================================="u7nLinux联盟
# while getopts :LTMSE: OPTIONu7nLinux联盟
while getopts LDTMCXAE: OPTIONu7nLinux联盟
dou7nLinux联盟
case $OPTION inu7nLinux联盟
E) MAIL=$OPTARGu7nLinux联盟
send=1u7nLinux联盟
;;u7nLinux联盟
L) cat header.ok|grep -i 'Content-Length' >> ./contentu7nLinux联盟
use=1 u7nLinux联盟
;;u7nLinux联盟
T) cat header.ok|grep -i 'Content-Type' >> ./contentu7nLinux联盟
use=1 u7nLinux联盟
;;u7nLinux联盟
M) cat header.ok|grep -i 'Last-Modified' >> ./contentu7nLinux联盟
use=1 u7nLinux联盟
;; u7nLinux联盟
D) cat header.ok|grep -i 'Date' >> ./contentu7nLinux联盟
use=1 u7nLinux联盟
;;u7nLinux联盟
C) cat header.ok|grep -i -E "^(Vary|Content-Encoding|Accept-Encoding).*" >> ./contentu7nLinux联盟
use=1 u7nLinux联盟
;; u7nLinux联盟
X) cat header.ok|grep -i -E "^X-Cache|Powered" >> ./content ###The same as ^(|).* u7nLinux联盟
use=1 u7nLinux联盟
;;u7nLinux联盟
A) cat header.ok > ./contentu7nLinux联盟
use=1 u7nLinux联盟
;;u7nLinux联盟
\?) helpu7nLinux联盟
send=0u7nLinux联盟
;;u7nLinux联盟
esacu7nLinux联盟
doneu7nLinux联盟
if [ $send == 1 ]&&[ $use == 1 ] ; thenu7nLinux联盟
/root/mail.pl "$MAIL" "${URL1}_test" "content"u7nLinux联盟
fiu7nLinux联盟
elseu7nLinux联盟
#echo "HTTP-respond code is $HTTP"u7nLinux联盟
cat header.ok >> ./contentu7nLinux联盟
/root/mail.pl "iori.yang@mail.com" "HTTP_CODE_ERR" "content"u7nLinux联盟
exit 1u7nLinux联盟
fiu7nLinux联盟
2. mail.pl
u7nLinux联盟
#!/usr/bin/perl u7nLinux联盟
#file main.plu7nLinux联盟
#version v1.0u7nLinux联盟
#by IORIu7nLinux联盟
#last modify 2007-11-2 15:00
use Net::SMTP;
#my $mailhost = "smtp.163.com"; # the smtp hostu7nLinux联盟
my $mailhost = "mail.com"; # the smtp hostu7nLinux联盟
my $mailfrom = 'iori.yang@mail.com'; # your email addressu7nLinux联盟
#my @mailto = ('fayland@gmail.com', 'not_four@hotmail.com'); # the recipient listu7nLinux联盟
my @mailto = $ARGV[0]; # the recipient listu7nLinux联盟
my $subject = $ARGV[1];u7nLinux联盟
my $text = $ARGV[2];
open(FILE,$text) || die "Can not open list file\n";u7nLinux联盟
undef $/;u7nLinux联盟
$text=<FILE>;
u7nLinux联盟
$smtp = Net::SMTP->new($mailhost, Hello => 'localhost', Timeout => 120, Debug => 1);
# anth login, type your user name and password hereu7nLinux联盟
$smtp->auth('user','pass');
foreach my $mailto (@mailto) {u7nLinux联盟
# Send the From and Recipient for the mail servers that require itu7nLinux联盟
$smtp->mail($mailfrom);u7nLinux联盟
$smtp->to($mailto);
# Start the mailu7nLinux联盟
$smtp->data();
# Send the headeru7nLinux联盟
$smtp->datasend("To: $mailtou7nLinux联盟
");u7nLinux联盟
$smtp->datasend("From: $mailfromu7nLinux联盟
");u7nLinux联盟
$smtp->datasend("Subject: $subjectu7nLinux联盟
");u7nLinux联盟
$smtp->datasend("u7nLinux联盟
");
# Send the messageu7nLinux联盟
$smtp->datasend("$text
");
# Send the termination stringu7nLinux联盟
$smtp->dataend();u7nLinux联盟
}u7nLinux联盟
$smtp->quit;
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论