我是bash脚本的新手,所以请放轻松我;).
我有一个文件在启动发送电子邮件的/ warner文件之前会进行一些检查.
不,脚本应该做的是:
如果要在日志文件中找到"rror"一词,如果文件较年轻,那么24小时>发送失败的电子邮件
如果文件超过24小时>发送未运行错误
如果以上都不是真的并且文件少于24小时,并且如果它包含单词'uccess'>发送成功的电子邮件.
自己编写脚本
string=rror string1=ucces FILE=/var/log/rsnapshot.log OLDTIME=86400 CURTIME=$(date +%s) FILETIME=$(stat $FILE -c %Y) TIMEDIFF=$(expr $CURTIME - $FILETIME) #tail -n0 -F /var/log/rsnapshot.log | \ while read LINE do if [ echo "$LINE" | grep "$string" 1>/dev/null 2>&1 -a $TIMEDIFF -lt $OLDTIME ]; // <- line 18 then /etc/init.d/warner "Warning from Socrates Backup" "Backup Failed" elif [ $TIMEDIFF -gt $OLDTIME ]; then /etc/init.d/warner "Warning from Socrates Backup - Backup Not Running!" "Backup file not running" elif echo "$LINE" | grep "$string1" 1>/dev/null 2>&1 then /etc/init.d/warner "Message from Socrates" "Backup Sucessfully Completed" fi done目前它确实向我发送了一封成功的电子邮件(因为该文件少于24小时并且它确实有一条'uccess'消息.但是这些if/else如果写得正确吗?如果有什么事情失败会被触发吗?我也是得到这个错误
line 18: [: missing `]'
Dummy00001.. 6
这条线是完全错误的:
if [ echo "$LINE" | grep "$string" 1>/dev/null 2>&1 -a $TIMEDIFF -lt $OLDTIME ];你的意思可能是:
if echo "$LINE" | grep -q "$string" && [ $TIMEDIFF -lt $OLDTIME ];你想读
Compound Commands
从man bash
,同时牢记[
只是一个命令了.(试试help test
.)
1> Dummy00001..:这条线是完全错误的:
if [ echo "$LINE" | grep "$string" 1>/dev/null 2>&1 -a $TIMEDIFF -lt $OLDTIME ];你的意思可能是:
if echo "$LINE" | grep -q "$string" && [ $TIMEDIFF -lt $OLDTIME ];你想读
Compound Commands
从man bash
,同时牢记[
只是一个命令了.(试试help test
.)