【问题标题】:bash if statement with timebash if 语句与时间
【发布时间】:2017-12-18 23:34:45
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: bash


【解决方案1】:

你的输出不是数字,而是像这样的字符串:

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

将其转换为Unixtime并比较清晰的数字,例如:

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,因此您将无法在else 语句中获得除echo no 之外的任何内容。

【讨论】:

  • 感谢您的帮助...它有效...没想到转换它们
  • 享受吧。顺便说一句,在 bash 中,在 if/while 语句中使用 -a 而不是 &&-o 而不是 ||
  • 我只是将 today_time 替换为示例...在将 if 应用于实际脚本之前对其进行测试...因为实际时间我将从数据库中获取并转换它
猜你喜欢
  • 1970-01-01
  • 2012-09-17
  • 2022-01-11
  • 2015-09-16
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多