Содержание
собственно я в баше вообще 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 отсутствует новая строка.