小编Mar*_*rco的帖子

Bash:计算两个时间戳之间经过的时间

我编写了一个脚本,当某个值不在给定范围内时会通知我。“超出范围”的所有值都记录在一组每日文件中。

每行都以专有的反向方式加时间戳: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)

linux scripting bash shell-script timestamps

10
推荐指数
2
解决办法
4万
查看次数

检查十进制数是否在 bc 的范围内

我已经写了这个 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 就太好了;)

shell-script bc math floating-point

1
推荐指数
1
解决办法
1007
查看次数

标签 统计

shell-script ×2

bash ×1

bc ×1

floating-point ×1

linux ×1

math ×1

scripting ×1

timestamps ×1