我对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 </var/log/rsnapshot.log
目前,它确实向我发送了一封成功的电子邮件(因为该文件不到24小时,并且确实有一条&#39; uccess&#39;消息。但是这些if / else是否正确写入?如果有任何失败的话他们被触发了吗?我也得到了这个错误
line 18: [: missing `]'
答案 0 :(得分: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
。)