Bash:开始日期小于等于结束日期

标签 bash shell date while-loop compare

#!/bin/bash
# slightly malformed input data
input_start=2014-11-1
input_end=2016-01-1

# After this, startdate and enddate will be valid ISO 8601 dates,
# or the script will have aborted when it encountered unparseable data
# such as input_end=abcd
startdate=$(date -I -d "$input_start") || exit -1
enddate=$(date -I -d "$input_end")     || exit -1

m="$startdate"
while [ "$m" != "$enddate" ]; do
  echo $m 
  m=$(date -I -d "$m + 1 month")
done

“脚本运行良好,但当我想更改 While 循环条件时,即 '<=' '小于或等于' 即使我尝试使用“-le”也会给出错误。我想在这里做的是开始日期<= enddate 在 while 循环中。任何人都可以建议需要做什么来克服这个问题。

Same Code

最佳答案

-le用于数值数据。 2014-11-01不是数字。使用 <> . (您需要将它们转义为 \<\> 。或者使用 [[ 而不是 [ 。)

有效,改变

while [ "$m" != "$enddate" ]; do

until [ "$m" \> "$enddate" ]; do

until [ "$m" '>' "$enddate" ]; do

until [[ "$m" > "$enddate" ]]; do

或者,使用 seconds since epoch而不是 ISO8601格式。

while [ "$(date -d "$m" +%s)" -le  "$(date -d "$enddate" +%s)" ]; do

关于Bash:开始日期小于等于结束日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43672278/

相关文章:

linux - curl 特定 header 的 "write out"值

shell - "<inp somecommand"和 "somecommand <inp"和有什么区别?

javascript - FullCalendar GMT +0200 日期

javascript - 使用 "new date()"JavaScript 函数时考虑控制面板日期时间

mysql - 将表从服务器A复制到服务器B

c - 统计信息未显示正确的 inode 号

perl - 如何从 shell 变量中获取值?

linux - ls: 未找到命令 BASH

r - 使用 lubridate 和 if 语句进行日期操作

bash - 如何在 bash 读取语句中检测失败的子进程?