
Estoy usando bash shell en Amazon Linux. No puedo entender por qué mi secuencia de comandos muere con un error de sintaxis. Mi guión termina así.
chmod 775 $TFILE2
output_file=$( create_test_results_file "$TFILE2" )
(cat $TFILE2; uuencode $output_file $output_file) | mailx -s "$subject" "$to_email"
rm $output_file
echo "sent second email"
#Cleanup
rm $TFILE1
rm $TFILE2
echo "removed files"
# If node exited unsuccessfully, verify we alert the process above.
if [ $rc1 != 0 ]; then exit $rc1 fi
if [ $rc2 != 0 ]; then exit $rc2 fi
y cuando lo ejecuto, imprime las dos últimas declaraciones de eco, pero luego parece morir después de eso.
sent second email
removed files
/home/jboss/.jenkins/jobs/springboard/workspace/automated-tests/nodejs/run_tests.sh: line 86: syntax error: unexpected end of file
¿Alguien puede decirme por qué muere con el error inesperado de fin de archivo?
Respuesta1
La respuesta corta es que fi
debe ser un comando separado, por lo que necesita punto y coma:
if [ $rc1 != 0 ]; then exit $rc1; fi
if [ $rc2 != 0 ]; then exit $rc2; fi
Debes citar tus variables y, dado que estás comparando números enteros, usa el operador apropiado:
if [ "$rc1" -ne 0 ]; then exit "$rc1"; fi
if [ "$rc2" -ne 0 ]; then exit "$rc2"; fi
aunque el comportamiento aquí es ligeramente diferente: los valores vacíos se considerarán iguales a 0 (donde !=
se considerarían diferentes).