Script de bash com condição OR

0

Esperando que alguém aqui possa me ajudar com um script bash que é executado apenas em certas condições.

#!/bin/bash
TODAY='date +%Y-%m-%d'
MODE=$1
if  [ $(date '+%A') == "Sunday" ] || [ $(date '+%d') == "01" ] || [ $MODE == 'Complete']
then
    echo "Running backup as it is the either a Sunday the 1st of the Month or the script was called with the paramater 'Complete'."
    /usr/bin/7z a -t7z -m0=lzma -mx=9 /external-storage/snapshots/snapshot-complete-"$TODAY"-public_html.7z /local-storage/www/public_html > /dev/null
fi

Quando tento executar o acima, recebo o erro.

line 4: [: missing ']'

Todas as dicas serão bem-vindas, obrigado antecipadamente.

    
por British Sea Turtle 28.09.2013 / 10:33

2 respostas

1

Eu tentaria assim:

#!/bin/bash
TODAY='date +%Y-%m-%d'
MODE=$1
DAY=$(date '+%A')
DATE=$(date '+%d')
if  [[  ($DAY == "Sunday")   ||  ($DATE == "01")  ||  ($MODE == "Complete") ]] ; then
    echo "Running backup as it is the either a Sunday the 1st of the Month or the script
    was called with the parameter 'Complete'."
 ...................
fi

Alguns parênteses existem apenas para maior clareza.

Mas você deve ser cuidadoso, seu teste não reflete o que sua afirmação de eco afirma. O teste é avaliado como positivo em QUALQUER domingo, não apenas no primeiro dia do mês.

    
por 28.09.2013 / 11:17
1

O ] é especial e precisa estar por conta própria. Você está perdendo um espaço antes do último.

Portanto, a linha 4 deve ser:

if  [ $(date '+%A') == "Sunday" ] || [ $(date '+%d') == "01" ] || [ $MODE == 'Complete' ]
    
por 28.09.2013 / 11:17

Tags