Cygwin Bash - if-Anweisung funktioniert nicht

Cygwin Bash - if-Anweisung funktioniert nicht

Ich bin neu im Bash-Scripting und versuche, es unter Windows zu lernen, also habe ich Cygwin heruntergeladen. Unter Windows 10 ist Cygwin v2.5.1

Ich habe sichergestellt, dass ich das Bash-Paket installiert habe (was ich getan habe), und habe dann angefangen, einige Tutorials durchzugehen, aber als ich zu if...fiden Anweisungen kam, funktionierte es nicht mehr. Hier ist mein Code:

#!/usr/bin/env bash
#
echo 'Hello'
#
if [ 1 -eq 1 ]
then
  echo 'Success'
fi
echo 'Hello Again'

Die Ausgabe ist

>./test.sh
Hello
./test.sh: line 10: syntax error: unexpected end of file

Ich kann beim besten Willen nicht herausfinden, was da schief läuft. Ich habe if-Anweisungen kopiert/eingefügt und verschiedene Arten von Ausdrücken ausprobiert, aber es scheint ifüberhaupt nichts zu registrieren.

Vielleicht habe ich Cygwin falsch konfiguriert?

Antwort1

Nun ja, ich fühle mich dumm. Aber ich beantworte diese Frage für alle anderen, die das gleiche Problem haben.

Da ich auf einem Windows-Computer entwickle, werden CRLF-Zeilenenden verwendet. Ich verwende Sublime Text und denke nie über Zeilenenden nach, da ich immer für Windows entwickle.

Aber natürlich müssen Bash-Skripte LF-Zeilenenden verwenden, sonst passieren komische Dinge. Ich konnte nicht sagen, warum echoBefehle ausgeführt werden können und nicht if...fi, aber als ich meine Zeilenenden auf LF umgestellt habe, funktionierte alles wie erwartet.

Antwort2

Bei mir funktioniert es, aber wenn ich den Zeilenabschluss auf DOS ändere (CR/LF-Zeilenabschluss)

$ u2d ./prova.sh
unix2dos: converting file ./prova.sh to DOS format...

$ ./prova.sh
Hello
./prova.sh: line 10: syntax error: unexpected end of file

also konvertieren Sie Ihr Skript in den Unix-Stil (LF als Zeilenende)

$ d2u ./prova.sh
dos2unix: converting file ./prova.sh to Unix format...
$ ./prova.sh
Hello
Success
Hello Again

verwandte Informationen