自动发送邮件脚本
注:在使用下文提到的脚本的时候请将[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提供了这种可能。