Tentando sair do script com um código de status, mas obtendo “final de arquivo inesperado”

0

Estou usando o shell bash no Amazon Linux. Não consigo descobrir 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 o executo, ele imprime as duas últimas instruções echo, mas depois parece que ele morreu 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 final inesperado do erro de arquivo?

    
por Dave 21.04.2017 / 17:09

1 resposta

3

A resposta curta é que fi precisa 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 != os consideraria diferentes).

    
por 21.04.2017 / 17:12