在 shell 中比较两个日期

在 shell 中比较两个日期

我尝试在 shell 脚本中比较两个日期,但总是得到错误的值。这是我使用的代码:

currenttime=$(date +%H%M%S);
peak_time=$(date -d "$peak_time" '+%H%M%S');

num1=$(($peak_time-$currenttime))
echo $num1
if [ $num1 < 0 ]
then
  echo "peak time is bigger than current"
else
  echo "peak time is smaller than now"
fi

我总是得到

峰值时间大于当前时间

即使它更小。

我再次尝试使用静态数字,如下所示:

    if [ 10 < 0 ]
    then
        echo "peak time is bigger than current"
    else
        echo "peak time is smaller than now"
    fi

我总是得到peak time is bigger than current。因此该if语句总是打印第一句话。

答案1

运行脚本时您还应该收到一条错误消息:

/home/terdon/scripts/foo.sh: line 7: 0: No such file or directory

这是因为你正在使用<[ ]并且它不进行算术比较,它是输入重定向. 所以$num1 < 0意味着“运行命令 $num1并将内容传递给它文件 0作为输入”。你想要的是[ $num1 -lt 0 ]-lt意思是“小于”。

当然,除非你正在某处进行设置,否则你的脚本没有任何意义peak_time。此行:

peak_time=$(date -d "$peak_time" '+%H%M%S');

总是会打印,000000因为当你运行它时,$peak_time没有值:

$ peak_time=$(date -d "$peak_time" '+%H%M%S');
$ echo $peak_time 
000000

您需要先设置$peak_time然后将其转换为日期。例如:

$ peak_time="10:05:31"
$ peak_time=$(date -d "$peak_time" '+%H%M%S');
$ echo $peak_time 
100531

因此,脚本的有效版本将是:

#!/bin/bash
currenttime=$(date +%H%M%S);
peak_time="10:05:31"
peak_time=$(date -d "+1 hour" '+%H%M%S');

num1=$(($peak_time-$currenttime))
echo $num1
if [ $num1 -lt 0 ]
then
  echo "peak time is bigger than current"
else
  echo "peak time is smaller than now"
fi

相关内容