Tentando sair do script com um código de status, mas obtendo "fim de arquivo inesperado"

Tentando sair do script com um código de status, mas obtendo "fim de arquivo inesperado"

Estou usando o shell bash no Amazon Linux. Não consigo entender por que meu script está morrendo com um erro de sintaxe. Meu script termina assim

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

e quando eu executo, ele imprime as duas últimas declarações de eco, mas parece morrer depois disso

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

Alguém pode me dizer por que está morrendo com o erro inesperado de final de arquivo?

Responder1

A resposta curta é que fiprecisa ser um comando separado, então você precisa de ponto e vírgula:

if [ $rc1 != 0 ]; then exit $rc1; fi
if [ $rc2 != 0 ]; then exit $rc2; fi

Você deve citar suas variáveis ​​e, como está comparando números inteiros, use o operador apropriado:

if [ "$rc1" -ne 0 ]; then exit "$rc1"; fi
if [ "$rc2" -ne 0 ]; then exit "$rc2"; fi

embora o comportamento aqui seja um pouco diferente: valores vazios serão considerados iguais a 0 (onde !=seriam considerados diferentes).

informação relacionada