Я новичок в bash-скриптинге и пытаюсь научиться работать на Windows, поэтому я скачал cygwin. Использую Windows 10, cygwin v2.5.1
Я убедился, что установил пакет bash (я это сделал), и поэтому я начал проходить некоторые руководства, но когда я дошел до if...fi
операторов, это перестало работать. Вот мой код:
#!/usr/bin/env bash
#
echo 'Hello'
#
if [ 1 -eq 1 ]
then
echo 'Success'
fi
echo 'Hello Again'
Выходной сигнал:
>./test.sh
Hello
./test.sh: line 10: syntax error: unexpected end of file
Я не могу понять, что не так. Я копировал/вставлял операторы if и пробовал разные типы выражений, но, похоже, он if
вообще не регистрирует the.
Может быть я неправильно настроил cygwin?
решение1
Ну...я чувствую себя глупым. Но я отвечу на этот вопрос для тех, у кого такая же проблема.
Так как я разрабатываю на компьютере с Windows, то он использует окончания строк CRLF. Я использую Sublime Text и никогда не думаю о окончаниях строк, потому что я всегда разрабатываю для Windows.
Но, конечно, скрипты bash должны использовать окончания строк LF, иначе происходят странные вещи. Я не могу сказать, почему он позволяет echo
командам выполняться, а не if...fi
, но когда я изменил окончания строк на LF, все заработало так, как и ожидалось.
решение2
У меня это работает, но если я изменю завершение строки на стиль DOS (завершение строки CR/LF),
$ u2d ./prova.sh
unix2dos: converting file ./prova.sh to DOS format...
$ ./prova.sh
Hello
./prova.sh: line 10: syntax error: unexpected end of file
поэтому преобразуйте свой скрипт в стиль unix (LF в качестве конца строки)
$ d2u ./prova.sh
dos2unix: converting file ./prova.sh to Unix format...
$ ./prova.sh
Hello
Success
Hello Again