2015-12-04 2 views
2

Я совершенно новичок в сценариях bash, так что не стесняйтесь меня;).Сценарий 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 часов, и у него есть сообщение «uccess». Однако в них, если/ElseIf написано правильно ? если что-нибудь не в состоянии будет их получить срабатывает, а также я получаю эту ошибку

line 18: [: missing `]' 
+0

Где находится линия 18? Если я подсчитаю строки, которые вы вставляли, они находятся в 'then'. – fedorqui

+0

@fedorqui Извинения не видели вашего комментария. 18-я строка является первой, если –

ответ

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.)

+0

Yup thats. я должен сделать больше RTFM –

+1

@MaciejCygan. В начале команда 'help' для внутреннего bash была очень полезна для меня. «Человек-баш» слишком велик, чтобы проглотить, а для базового синтаксиса «help ' + googling более чем достаточно. – Dummy00001

Смежные вопросы