Beim Versuch, das Skript mit einem Statuscode zu beenden, wird die Meldung „Unerwartetes Dateiende“ angezeigt.

Beim Versuch, das Skript mit einem Statuscode zu beenden, wird die Meldung „Unerwartetes Dateiende“ angezeigt.

Ich verwende die Bash-Shell unter Amazon Linux. Ich kann nicht herausfinden, warum mein Skript mit einem Syntaxfehler abstürzt. Mein Skript endet so

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

und wenn ich es ausführe, druckt es die letzten beiden Echo-Anweisungen aus, scheint danach aber abzustürzen

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

Kann mir jemand sagen, warum es mit dem unerwarteten Dateiende-Fehler abstürzt?

Antwort1

Die kurze Antwort lautet: Es fimuss ein separater Befehl sein, Sie benötigen also Semikolons:

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

Sie sollten Ihre Variablen in Anführungszeichen setzen und, da Sie ganze Zahlen vergleichen, den entsprechenden Operator verwenden:

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

obwohl das Verhalten hier etwas anders ist: Leere Werte werden als gleich 0 betrachtet (wobei !=sie als anders betrachtet würden).

verwandte Informationen