script de backup do shell, ausente ']'

4

Estou montando um script de backup simples que irá distribuir o conteúdo de uma pasta e, em seguida, mover esse arquivo para um servidor de backup. O script garante que o arquivo tar exista e não seja zero antes de se mover.

O problema é que o script está morrendo em uma das linhas IF

if [ -f /www/archives/pdf/pdf_201207021048.tar && 11294720 -gt 0 ]; then
    echo "tar file exists and is greater than 0 bytes."
else
    echo "tar file does not exist or is zero bytes"
fi

O erro no console é:

./backup_pdf.sh: line 49: [: missing ']'

A linha 49 é a declaração if acima.

O script foi verificado com êxito com

sh -n backup.sh

Qual é o erro que sh está vendo a falta de ']', mas passa a verificação de sintaxe?

    
por a coder 02.07.2012 / 17:09

1 resposta

9

O problema é que && não é um operador válido para [ . Ele precisa de -a , ou [ condition ] && [ other_condition ] .

&& é um separador (como é ; , || , & e \n ) em um shell posix. Veja a instrução [ -f www/archives/pdf/pdf_201207021048.tar ; a instrução termina porque existe um && , então há outra instrução (que também causaria um erro se chegar a ela) que se parece com 11294720 -gt 0 ] , e essa instrução é terminada com ; .

    
por 02.07.2012 / 17:11