Bash脚本 - if和else if语句

时间:2015-12-04 14:06:00

标签: bash shell if-statement

我对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 `]'

1 个答案:

答案 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。)