script de backup do shell, faltando `]`

script de backup do shell, faltando `]`

Estou montando um script de backup simples que irá tar o conteúdo de uma pasta e depois mover esse arquivo para um servidor de backup. O script garante que o arquivo tar exista e não tenha zero bytes antes de movê-lo.

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 instrução if acima.

O script foi verificado com sucesso com

sh -n backup.sh

O que há de errado em shver um ']' ausente, mas passar na verificação de sintaxe?

Responder1

O problema é que &&não é um operador válido para [. Em vez disso, ele precisa -aou [ condition ] && [ other_condition ].

&&é umseparador(como está ;, ||e &) \nem um shell posix. Ele vê a declaraçã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 chegasse a ela) que se parece com 11294720 -gt 0 ], e essa instrução é terminada com ;.

informação relacionada