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 sh
falte un ']' y, sin embargo, pase la verificación de sintaxis?
Respuesta1
El problema es que &&
no es un operador válido para [
. Necesita -a
en 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 ]
;