如何将今天的日期与一系列日期进行比较

如何将今天的日期与一系列日期进行比较

我想创建一个日期数组并将其与今天的日期进行比较,如果匹配则执行 test.sh 文件,否则退出 bash 脚本中的循环。到目前为止我有这个:

#!/bin/bash
now=$(date +%Y-%m-%d)
array=['2016-03-02','2015-01-02']
for i in "${array[@]}"
do
    if [ $now -eq $i ]; then
        bash test.sh
    else
        echo "error"
    fi
done

请写出正确的方法来做到这一点..

答案1

  • 使用declare括号填充数组。元素以空格分隔,而不是逗号。
  • 该运算符-eq仅适用于整数,而您的日期不是整数,请使用字符串匹配。

    #!/bin/bash
    now=`date +%Y-%m-%d`
    declare -a array=('date1' 'date2')
    for i in "${array[@]}"; do
      if [[ $now == $i ]]; then
            bash test.sh
      else
            echo "error"
      fi
    done
    

答案2

除了循环之外,您还可以构建一个以空格分隔的字符串,然后查看变量替换是否会改变该字符串:

today=$(date "+%Y-%m-%d")

DATES=" 2016-03-02 2015-01-02 "
if [ "${DATES/ ${today} /}" != "${DATES}" ]; then bash test.sh ; else echo "error"; fi

编辑:实际上,就此用法而言,空格分隔符并不是必需的,因为破折号隐式地将搜索锚定到日期格式,但通常使用不在匹配字符串内的分隔符更有用。

相关内容