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)
这条线是完全错误的:
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 Commands从man bash,同时牢记[只是一个命令了.(试试help test.)