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 sh
ver 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 -a
ou [ condition ] && [ other_condition ]
.
&&
é umseparador(como está ;
, ||
e &
) \n
em 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 ;
.