script de copia de seguridad de shell, falta `]`

script de copia de seguridad de shell, falta `]`

Estoy creando un script de respaldo simple que tarificará el contenido de una carpeta y luego moverá ese archivo a un servidor de respaldo. El script se asegura de que el archivo tar exista y no tenga cero bytes antes de moverse.

El problema es que el script está muriendo en una de las líneas 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

El error en la consola es:

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

La línea 49 es la declaración if anterior.

El script se verifica exitosamente con

sh -n backup.sh

¿Qué hay de malo en que shfalte un ']' y, sin embargo, pase la verificación de sintaxis?

Respuesta1

El problema es que &&no es un operador válido para [. Necesita -aen su lugar, o [ condition ] && [ other_condition ].

&&es unseparador(tal como está , y ;) ||en un shell posix. Ve la declaración ; la declaración termina porque hay un , luego hay otra declaración (que también causaría un error si llegara a ella) que se parece a , y esa declaración termina con .&\n[ -f www/archives/pdf/pdf_201207021048.tar&&11294720 -gt 0 ];

información relacionada