Bash脚本 - if和else if语句

Mac*_*gan 2 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
Run Code Online (Sandbox Code Playgroud)

目前它确实向我发送了一封成功的电子邮件(因为该文件少于24小时并且它确实有一条'uccess'消息.但是这些if/else如果写得正确吗?如果有什么事情失败会被触发吗?我也是得到这个错误

line 18: [: missing `]'
Run Code Online (Sandbox Code Playgroud)

Dum*_*001 6

这条线是完全错误的:

if [ echo "$LINE" | grep "$string" 1>/dev/null 2>&1 -a $TIMEDIFF -lt $OLDTIME ];
Run Code Online (Sandbox Code Playgroud)

你的意思可能是:

if echo "$LINE" | grep -q "$string" && [ $TIMEDIFF -lt $OLDTIME ];
Run Code Online (Sandbox Code Playgroud)

你想读Compound Commandsman bash,同时牢记[只是一个命令了.(试试help test.)