我想创建一个日期数组并将其与今天的日期进行比较,如果匹配则执行 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
编辑:实际上,就此用法而言,空格分隔符并不是必需的,因为破折号隐式地将搜索锚定到日期格式,但通常使用不在匹配字符串内的分隔符更有用。