自动发送邮件脚本
注:在使用下文提到的脚本的时候请将[email protected]替换成你所能接收到邮件的邮箱地址。
记得在学校的时候,有一次和老师讨论问题,有一些不明白的地方,他说,你可以编个程序验证一下。我差点没有晕过去。因为那时的我非常害怕编程。不过还好,有很多事情我们不需要编程就可以实现。
比如最近,我开始厌烦在桌子上面的两条电脑之间转来转去,于是我打算写一小段shell脚本,当linux/unix下面的工作完成的时候,系统自动发送一个邮件到windwos下面通知我。
在Linux和Unix下面发送邮件非常方便,如果只是要发送一个消息,那么需要的命令就更简单了,只不过不同的系统邮件服务器命令稍有不同。对于我,经常工作的电脑是HP的C8000工作站,它的系统是HP-UX,还有一台也是HP,安装的是redhat AS系统。
HP-UX的邮件程序需要在terminal下面输入:mail命令,然后进去写信,而redhat的邮件发送程序就比较方便,只要一条命令就可以指定主题、附件、内容:echo "Content:The work is done" | mail -s "This is subject" [email protected]
下面这一段脚本就是通过某一个文件是否已经生成进行判断,如果生成了就发送通知邮件到指定邮箱。否则就每30秒钟检查一次,有完成的就发送通知邮件,有没有完成的就休眠后继续循环,一直到全部完成再退出。
#!/bin/csh
set arrayA = ($*)
set i=1
set SysInfo = `uname`
set arrayB = ()
while ( $i <= $#arrayA )
if ( -f ${arrayA[$i]}/result_data.txt) then
if ($SysInfo == HP-UX ) then
mail [email protected] << !
Subject:'${arrayA[$i]} is finished'
'${arrayA[$i]} is finished'
.
!
else
echo "${arrayA[$i]} is finished" | mail -s "${arrayA[$i]} is finished" [email protected]
endif
echo "${arrayA[$i]} is finished, a mail is sent to mwang"
else
set arrayB = ( $arrayB $arrayA[$i] )
endif
if ( ( $i >= $#arrayA ) && $#arrayB) then
set arrayA = ($arrayB)
echo "$arrayA is under calculation, please wait. Now: " `date`
set arrayB = ()
set i = 0
sleep 30
endif
@ i++
end
你现在越来越hacker了~~
我越来越懒了,现在总是希望避免不必要的重复性工作,还好linux提供了这种可能。