Я новичок в 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 .

Может я неправильно настроил cygwin?

2 ответа2

0

Что ж...Я чувствую себя глупо Но я отвечу на этот вопрос для тех, у кого есть такая же проблема.

Поскольку я занимаюсь разработкой на компьютере под управлением Windows, он использует окончания строк CRLF. Я использую Sublime Text и никогда не думаю о конце строк, потому что я всегда разрабатываю для Windows.

Но, конечно же, bash-скрипты должны использовать LF-окончания строк, иначе произойдет что-то странное. Я не мог сказать, почему он позволяет выполнять команды echo а не if...fi , но когда я переключил мои окончания строки на LF, все работало так, как вы ожидаете.

0

Это работает для меня, но если я изменю окончание строки на стиль 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .