cria uma matriz de datas em scripts bash e corresponde a data atual

0

Na verdade, quero criar uma matriz de datas e compará-la com a data de hoje se corresponder à data atual e, em seguida, executar test.sh file, caso contrário, saia do loop no script bash. Eu fiz assim ...

#!/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

quando executo o script acima, ele gera um erro como

./sample.sh: line 6: [: 2016-03-02: integer expression expected
    
por guest111 02.03.2016 / 11:24

2 respostas

4

Tente assim:

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

Os erros:

  1. não use colchetes para declarar um array em um script bash - esses colchetes fazem comandos (veja 'if'-tests)
  2. elementos-matriz em scripts bash são separados por espaços em branco (sem vírgulas)
  3. se você quiser comparar strings, use aspas duplas em torno das variáveis, que contêm essas strings
  4. não use '-eq' como operador aqui (porque é um operador aritmético). Em vez disso, use "==" ou "!=" (Veja também aqui: link )
por 02.03.2016 / 12:10
0

Você não precisa extrair bash ou matrizes para isso. Você pode fazer:

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

ou:

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

Ou apenas:

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

Para matrizes pesquisáveis, prefiro usar zsh than bash :

#! /bin/zsh -

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