我尝试在 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