我编写了一个脚本,当某个值不在给定范围内时会通知我。“超出范围”的所有值都记录在一组每日文件中。
每行都以专有的反向方式加时间戳:yyyymmddHHMMSS
现在,我想改进脚本,并在给定超出范围值的上次通知后至少过去 60 分钟时接收通知。
我已经解决了以相反顺序打印日志的问题:
for i in $(ls -t /var/log/logfolder/*); do zcat $i|tac|grep \!\!\!|grep --color KEYFORVALUE; done
Run Code Online (Sandbox Code Playgroud)
结果是:
...
20170817041001 - WARNING: KEYFORVALUE=252.36 is not between 225 and 245 (!!!)
20170817040001 - WARNING: KEYFORVALUE=254.35 is not between 225 and 245 (!!!)
20170817035001 - WARNING: KEYFORVALUE=254.55 is not between 225 and 245 (!!!)
20170817034001 - WARNING: KEYFORVALUE=254.58 is not between 225 and 245 (!!!)
20170817033001 - WARNING: KEYFORVALUE=255.32 is not between 225 and 245 (!!!)
20170817032001 - WARNING: KEYFORVALUE=254.99 …
Run Code Online (Sandbox Code Playgroud) 我已经写了这个 if ,这显然不起作用,而且我仍然无法克服它:
#LASTEFFECTIVEHASH
if (( $(echo "$LASTEFFECTIVEHASHMINVAL < $LASTEFFECTIVEHASH < $LASTEFFECTIVEHASHMAXVAL" | $BC -l) )); then
echo "$DATESTAMP - LASTEFFECTIVEHASH=$LASTEFFECTIVEHASH is between $LASTEFFECTIVEHASHMINVAL and $LASTEFFECTIVEHASHMAXVAL"|tee -a $LOGFILE
else
echo "$DATESTAMP - LASTEFFECTIVEHASH=$LASTEFFECTIVEHASH is not between $LASTEFFECTIVEHASHMINVAL and $LASTEFFECTIVEHASHMAXVAL"|tee -a $MSGFILE $LOGFILE
fi
Run Code Online (Sandbox Code Playgroud)
但是,当值超出范围时,会导致以下结果:
20170810003646 - LASTEFFECTIVEHASH=139.2 is between 104.9 and 136.9
Run Code Online (Sandbox Code Playgroud)
我遵循数学语法:如果 x > 104.9 且 < 136.9,则在数学中写为104.9 < x < 136.9
。但我怀疑 bash/bc 的行为与我的数学老师不同。
如果 bc 不会数到 137 就太好了;)