在bash中编写一个简单的备份脚本并将echo输出发送到电子邮件

时间:2010-07-04 22:15:57

标签: bash backup

我编写了一个脚本,将我的财务电子表格文档备份到另一台硬盘和另一台计算机上。我还用电子邮件设置我的服务器,将cronjob消息发送到我的电子邮件而不是系统邮件。在我的脚本中,我无法弄清楚如果用于检查备份文件的日期和当前日期。这是脚本

#!/bin/bash
mount -t cifs //IP/Share /Drive/Directory -o username=username,password=password

cp /home/user/Desktop/finances10.ods /media/MediaConn/financesbackup/Daily\ Bac$
cp /home/user/Desktop/finances10.ods /Drive/Directory/FinancesBackup/Daily\ Backup/

umount /Drive/Directory
export i=`stat -c %y /media/MediaConn/financesbackup/Daily\ Backup/finances10.o$
export j=`date +%d`
if ["$i"="$j"]; then
 echo Your backup has completed successfully.  Please check the Daily Backup fo$
 echo This message is automated by the system and mail is not checked.
else
 echo Your backup has failed.  Please manually backup the financial file to the$
 echo drive.  This message is automated by the system and mail is not checked.
fi

非常简单的脚本。输出是通过电子邮件发送的,因为它是一个cronjob。如果有人可以提供帮助,我会非常感激。提前致谢

4 个答案:

答案 0 :(得分:3)

你的代码在帖子中都搞砸了,但无论如何......你应该将'stat -c%Y'(不是%y)的输出与'date +%s'的输出进行比较(不是%) d)。

但是,更好的是,使用md5sum或sha1sum之类的东西来确保备份文件与原始文件真正匹配。

答案 1 :(得分:1)

我强烈建议您检查脚本中的每个命令是否成功。否则,脚本会盲目地(最多)退出并带有成功代码或(最坏的情况下)做一些完全出乎意料的事情。

Here's a decent tutorial关于捕获和处理退出代码。

答案 2 :(得分:1)

此行需要括号内的空格和等号:

if [ "$i" = "$j" ]; then

在此上下文中无需export变量。

您应该使用vanza建议的格式代码,因为它们对应的格式与Unix纪元以来的秒数相同。

您应该在回显的消息周围加上引号:

echo "some message"

当您粘贴代码(显然是从nano复制)时,它会被截断。如果您使用less列出它并从那里复制它可能会更好,因为less可能会换行而不是截断它们。

答案 3 :(得分:0)

感谢所有的输入。对不起,我从nano复制粘贴,哈哈,没意识到它被截断了。你的所有建议都非常有帮助。我能够使用我的格式做我想要的但只是在括号和等号之间放置空格。我从未使用过md5sum或sha1sum,但会检查出来。再次感谢您的帮助,现在它的工作非常好!