Синтаксическая ошибка неожиданный конец файла

собственно я в баше вообще 0 , даже не знаю с чем его едят , мне просто нужно выполнить файл , а он падло ругается )) , гуглил говорят ошибка чаще всего бывает потому что не закрыт if тегом fi , но у меня походу не тот случай , как решить проблему?

строка 21: ошибка синтаксиса: неожиданный конец файла.

2 ответа 2

Все баш правильно ругается. if — два штуки, а fi — один. Вот и ругается. Исправленный вариант

можно, как справедливо указано в предыдущем ответе, добавить недостающий оператор fi .

а можно вместо этого заменить операторы else if на один оператор elif . тогда одного оператора fi будет достаточно.

57 markcruz [2011-06-16 05:34:00]

Простите, что это очень простой script в Bash. Здесь код:

после запуска sh file.sh:

Синтаксическая ошибка: неожиданный конец файла

12 ответов

87 Решение clyfish [2011-06-16 05:50:00]

Я думаю, файл file.sh с терминаторами линии CRLF.

тогда проблема будет исправлена.

Вы можете установить dos2unix в ubuntu следующим образом:

71 ulidtko [2014-07-08 18:37:00]

Еще одна вещь, которую нужно проверить (только что произошло со мной):

  • завершать тела однострочных функций с точкой с запятой

т.е. этот невинно выглядящий фрагмент вызовет ту же ошибку:

Чтобы сделать немой синтаксический анализатор счастливым:

22 marengaz [2015-11-26 16:36:00]

Я также получил это сообщение об ошибке, используя неправильный синтаксис в предложении if

  • else if (синтаксическая ошибка: неожиданный конец файла)
  • elif (правильный синтаксис)

i отлаживает его, комментируя биты до тех пор, пока не сработает

6 theRiley [2017-08-28 04:00:00]

неблокированное предложение if = > fi также поднимет это значение

tip: используйте trap для отладки, если ваш script огромен.

Читайте также  Скатывание тела с наклонной плоскости лабораторная работа

например. set -x trap read debug .

5 zzapper [2013-06-17 13:14:00]

на cygwin Мне нужно: —

в .bash_profile. Таким образом, мне не нужно было запускать unix2dos

Итак, я нашел этот пост, и ответы не помогли мне, но я смог понять, почему он дал мне ошибку. У меня был

Проблема заключалась в том, что я скопировал вышеуказанный код, чтобы быть в функции, и непреднамеренно закрепил код. Необходимо убедиться, что последний EOF не включен.

Мне удалось вырезать и вставить ваш код в файл, и он работал правильно. если ты выполните его следующим образом:

Ваш файл "file.sh":

Обратите внимание, что "file.sh" должен быть выполнен:

Вы можете получить эту ошибку b/c от того, как вы делаете ввод (с трубой, морковью, и т.д.). Вы также можете попробовать расщепить условие на два:

Или, поскольку вы используете bash , вы можете использовать встроенный синтаксис:

И, наконец, вы могли бы, конечно, просто проверить, были ли предоставлены 3 аргумента (чистые, поддерживает совместимость оболочки POSIX):

Убедитесь, что имя каталога, в котором присутствует файл .sh, не имеет пробела. например: Скажите, находится ли она в папке "Новая папка", вы обязательно столкнетесь с приведенной вами ошибкой. Вместо этого просто назовите его "New_Folder". Надеюсь, это поможет.

0 Adam Liss [2011-06-16 05:47:00]

Я просто вырезал и ввел ваш пример в файл; он работал нормально под bash. Я не вижу никаких проблем с этим.

Для хорошей меры вы можете убедиться, что она заканчивается символом новой строки, хотя bash не волнует. (Он работает для меня как с окончанием новой строки, так и без нее.)

Иногда вы видите странные ошибки, если случайно ввели в файл управляющий символ. Поскольку это короткий script, попробуйте создать новый script, вставив его из вашего вопроса здесь в StackOverflow или просто повторно набрав его.

Читайте также  Распечатать красивое поздравление с днем рождения

Какую версию bash вы используете? ( bash —version )

Откройте файл в Vim и попробуйте

Преобразуйте окончания строки eh в окончание unix и посмотрите, разрешает ли это вопрос. Если вы редактируете в Vim, введите команду: set fileformat = unix и сохраните файл. Несколько других редакторов имеют возможность конвертировать строку таких как Notepad ++ или Atom

0 Neb [2018-03-13 11:12:00]

Затем File -> Save as и установите end line в Unix/Linux

0 tripleee [2016-09-21 06:17:00]

По-видимому, некоторые версии оболочки также могут выдать это сообщение, когда в последней строке вашего script отсутствует новая строка.

Ссылка на основную публикацию
Adblock
detector