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」-testsを参照)。
  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

関連情報