bash如果声明随着时间的推移

问题描述 投票:0回答:1

我正在尝试测试一个日期...如果它在这两个时间帧之间我想打印它们......但是我得到错误..这是我的脚本

today_time=$(date +%H:%M:%S --date '-1 sec')
today_dow=$(date +"%u")

today_less=$(date +%H:%M:%S --date '-1 min')
today_more=$(date +%H:%M:%S --date '+1 min')
echo $today_less
echo $today_time
echo $today_more

if [ $today_less -gt $today_time ] && [ $today_time -lt $today_more ]; then
        echo "$today_less"
        echo "$today_time"
        echo "$today_more"
else
        echo no
fi

我用-le尝试了-ge并给了我:整数表达式期望-gt和-lt:期望整数表达式我也使用'<'和'>'并给我:没有这样的文件或目录。

我需要仅使用时间日期来完成这项工作...而不是使用int

因为我将从db中提取它并将today_time替换为db的时间。

bash
1个回答
2
投票

您的输出不是数字,而是字符串,如:

[sahaquiel@sahaquiel-PC ~]$ date +%H:%M:%S --date '-1 min'
13:40:30

将其转换为Unix时间并比较实数,例如:

today_time=$(date +%H:%M:%S --date '-1 sec')
today_time_u=$(date +%s --date '-1 sec')

today_dow=$(date +"%u")  

today_less=$(date +%H:%M:%S --date '-1 min')
today_less_u=$(date +%s --date '-1 min')

today_more=$(date +%H:%M:%S --date '+1 min')
today_more_u=$(date +%s --date '+1 min')

echo $today_less
echo $today_time
echo $today_more

if [ $today_less_u -gt $today_time_u -a $today_time_u -lt $today_more_u ]; then
        echo "$today_less"
        echo "$today_time"
        echo "$today_more"
else
        echo no
fi

再一次,在你的例子中,$today_less是当前日期 - 1分钟; $today_time是当前日期 - 1秒;所以,$ today_time> $ today_less每次和你的if [ $today_less_u -gt $today_time_u部分每次都是false,所以你在echo no声明中除了else之外什么也得不到。

© www.soinside.com 2019 - 2024. All rights reserved.