确定字符串“a”在“x”小时内是不是相同然后执行“Y”的 Bash 脚本
Posted
技术标签:
【中文标题】确定字符串“a”在“x”小时内是不是相同然后执行“Y”的 Bash 脚本【英文标题】:Bash script that that determine if string "a" is the same for "x" hours then do "Y"确定字符串“a”在“x”小时内是否相同然后执行“Y”的 Bash 脚本 【发布时间】:2021-03-26 21:21:30 【问题描述】:希望这不是转发。
我试图在我的脚本中插入一行,以确定字符串文件的值在“x”小时(1-2 小时)内是否与发送邮件相同。这是我的逻辑
if [[ "$LAST_VALUE" -eq 1 for "x" hours ]]; then
mails -s .....
else
echo "The value has been changed"
fi
问题在于如何为 bash 编写此代码。 很多谢谢!
【问题讨论】:
您的系统是否处于某种循环中?或者这个脚本是如何运行的?它是在 cronjob 中不断地重新运行,还是在循环中不断地运行,或者脚本本身是否包含一个循环?另外,您从哪里获得分配给LAST_VALUE
的值?
它在 cronjob 中运行。它从我的数据库中获取值并将其插入到一些输出中。问题是我如何检查我的 $LAST_VALUE" (这是一个输出)如果它是 -eq 到 "1" 超过 "x" 然后做 "y"
【参考方案1】:
从您的 cmets 中,我了解到您可以通过某些数据库查询或某些外部命令来提取 LAST_VALUE
的值。让我们称之为db_query
。我的建议是有一个包含此值及其更改时间的外部文件。
假设我们有文件:/tmp/dbquery.txt
并包含如下行:
key epoch value
那么我们可以有如下脚本:
#!/usr/bin/env bash
# read old value
read -r key old_epoch old_value < /tmp/dbquery.txt
# query and store new values
last_value="$(dbquery)"
last_epoch="$(date "+%s")"
if [[ "$last_value" == "$old_value" ]]; then
echo $key $old_epoch $old_value > /tmp/dbquery.txt
else
echo $key $last_epoch $last_value > /tmp/dbquery.txt
fi
if [[ "$last_value" == 1 ]] && (( last_epoch - old_epoch > 3600 )); then
do stuff
fi
【讨论】:
以上是关于确定字符串“a”在“x”小时内是不是相同然后执行“Y”的 Bash 脚本的主要内容,如果未能解决你的问题,请参考以下文章