在 bash 脚本中创建日期数组并匹配当前日期

在 bash 脚本中创建日期数组并匹配当前日期

实际上我想创建一个日期数组,并将其与今天的日期进行比较(如果它与当前日期匹配),然后执行test.sh文件,否则退出 bash 脚本中的循环。我确实喜欢这个...

#!/bin/bash

cd /home/user1

current_date=$(date +%Y-%m-%d)

array=['2016-03-02','2016-03-010','2016-05-10']

for i in "${array[@]}"
do
if [ $now -eq $i ]; then
        echo "executing your bash script file"
    ./myscript.sh
fi
done

当我执行上面的脚本时,它会给出类似的错误

./sample.sh: line 6: [: 2016-03-02: integer expression expected

答案1

试试这样:

current_date=$(date +%Y-%m-%d)

array=('2016-03-02' '2016-03-010' '2016-05-10')

for i in "${array[@]}" ; do

    if [ "$current_date" == "$i" ]
        then echo "executing your bash script file"
        #./myscript.sh
    fi

done

错误:

  1. 不要在 bash 脚本中使用方括号来声明数组 - 这些括号生成命令(请参阅“if”-测试)
  2. bash 脚本中的数组元素由空格分隔(无逗号)
  3. 如果要比较字符串,请在保存这些字符串的变量周围使用双引号
  4. 不要在这里使用“-eq”作为运算符(因为它是算术运算符)。而是使用“==”或“!=”(也请参见此处:http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-11.html

答案2

您不需要bash为此拉取或数组。你可以做:

#! /bin/sh -
if grep -qx "$(date +%Y-%m-%d)" << EOF
2016-03-02
2016-03-01
2016-05-10
EOF
then
   test.sh
fi

或者:

#! /bin/sh -
dates="2016-03-02 2016-03-01 2016-05-10"
case " $dates " in
  *" $(date +%Y-%m-%d) "*)
     test.sh
esac

要不就:

#! /bin/sh -
case $(date +%Y-%m-%d) in
  2016-03-02|2016-03-01|2016-05-10) test.sh
esac

对于可搜索数组,我宁愿zsh使用bash

#! /bin/zsh -

dates=(2016-03-02 2016-03-01 2016-05-10)
if ((dates[(I)$(date +%Y-%m-%d)])) test.sh

相关内容