Quando algo não funciona, você deveria tentar separá-lo e ver o que as peças fazem assim você pode descobrir onde ele falha. Experimente apenas este comando:
echo "$LOGGER" | awk "/Send Command has completed Successfully/"
O que você ganha?
Apenas a linha *** Send Command has completed Successfully
.
Então, é claro, dar uma cotovelada para a data não funciona;
essa linha não contém uma data.
Se você quiser uma solução para o awk, tente algo como
echo "$LOGGER" | awk -vc="$currentdate" '
/Send Command has completed Successfully/ { flag1=1 }
$0 ~ c { flag2=1 }
END { if (flag1 && flag2) print "Yes"; else print "No" }'
que passa a variável do shell currentdate
no awk como variável awk c
e, em seguida, verifica se ele e a string "Enviar comando ..."
ambos estão presentes na entrada.
E, a propósito,
- Você deve sempre citar suas referências de variáveis de shell
(por exemplo,
"$currentdate"
) a menos que você tenha um bom motivo para não e você tem certeza de que sabe o que está fazendo. Seu comandogrep … $currentdate
nunca poderia ter funcionado sem aspas contanto que"$currentdate"
tenha um espaço. -
Se você quiser verificar se a entrada do registro é atual até a hora, você não deve usar
%I
em seu comandodate
- ele retorna a hora no intervalo 01..12. Então,- Se a entrada do registro for de 1AM
(e, portanto, diz
"%código%")
e o horário atual é 1PM,
sua variável
2017/04/18 01:##:## About to execute the following Send command:…
será$currentdate
e por isso vai dizer que a mensagem de 12 horas é atual, mas - se, como no seu exemplo, a entrada de log for de 13:00
(e, portanto, diz
"%código%")
e o horário atual é 1PM,
sua variável
2017/04/18 01
será (novamente)2017/04/18 13:05:32 About to execute the following Send command:…
e por isso vai dizer que a mensagem atual não é atual.
Você deve usar
$currentdate
, que varia (00..23). - Se a entrada do registro for de 1AM
(e, portanto, diz
"%código%")
e o horário atual é 1PM,
sua variável