#!/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 循环中。任何人都可以建议需要做什么来克服这个问题。
最佳答案
-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/