当前位置:  开发笔记 > 编程语言 > 正文

Bash脚本 - if和else if语句

如何解决《Bash脚本-if和elseif语句》经验,为你挑选了1个好方法。

我是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 Commandsman 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 Commandsman bash,同时牢记[只是一个命令了.(试试help test.)

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有