我正在编写一个 shell 脚本,如果当前时间在 19:00 到凌晨 1:00 之间,它将执行一些操作,因此我通过以下方式获取当前时间:
currenttime=$(date +%H%M%S);
我将开始时间和结束时间格式转换为如下格式:
starttime=$(date -d 19:00 '+%H%M%S');
endtime=$(date -d 01:00 '+%H%M%S');
因此我制定了这个条件来检查当前时间是否在 19 点到凌晨 1 点之间:
num1=$(($starttime-$currenttime))
num2=$(($endtime-$currenttime))
if [ $num1 -lt 0 -a $num2 -gt 0 ];
then
echo "the current time is between 19:00 and 01:00 "
else
echo "the current time is not in range "
fi
因此如果当前时间是:
20:00
的值num1
将是:
190000-20000=-1000
的值num2
将是:
010000-20000=-10000
因此该条件不适用,因为num2
总是小于零。请帮忙。我该如何进行真正的比较?
答案1
如果您尝试将两种情况合并到单个测试中,则可能会一次性承担太多任务。
您可能会发现将测试分为两种情况来解决这个问题很有帮助:
时间是在 1900 年至午夜之间吗?
时间是在午夜到凌晨 01:00 之间吗?
最后,你使用之间有点模棱两可。如果时间恰好是 19:00 或恰好是 01:00,情况会怎样?这是否在“介于”界限之间?以不同的值为例,对“介于”的严格解释可能表明 1 和 3“介于”之间的唯一整数是 2。这些有时被称为“边缘情况”,而您所述的问题并未完全定义当出现这些边缘情况之一时您想要的结果。