Простите меня за то, что это очень простой скрипт на Bash. Вот код:
#!/bin/bash
# june 2011
if [ $# -lt 3 -o $# -gt 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
после запуска sh file.sh:
синтаксическая ошибка: неожиданный конец файла
Еще одна вещь, которую нужно проверить (только что произошло со мной):
Т.е. этот невинно выглядящий фрагмент вызовет ту же ошибку:
Чтобы осчастливить тупой парсер:
источник
;
том, что оператор Every должен заканчиваться;
так, что в конце, например:if [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash fi
вызовет эту ошибку, тогда какif [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash; fi;
не ... заметит маленькие точки с запятой в конце, то есть: после.bash
иfi
.zsh
пользователь. Бывший делает работу ,zsh
но не вsh
ниbash
. Хотелось бы, чтобы меня было 4 человека, чтобы я мог дать эти 4 голоса заЯ также только что получил это сообщение об ошибке из-за неправильного синтаксиса в
if
предложенииelse if
(синтаксическая ошибка: неожиданный конец файла)elif
(правильный синтаксис)Я отлаживал его, комментируя биты, пока он не работал
источник
Незакрытое предложение if => fi также вызовет это
Совет: используйте ловушку для отладки, если ваш скрипт огромен ...
например
источник
unexpected end of file
ошибка возникнет, как только будет нажатаfi
кнопка.Я получил этот ответ от аналогичной проблемы на StackOverflow
Откройте файл в Vim и попробуйте
:set fileformat=unix
Спасибо @lemongrassnginger
источник
dos2unix
как советует принятый ответ.на cygwin мне понадобилось: -
в .bash_profile. Таким образом, мне не нужно было запускать unix2dos
источник
Итак, я нашел этот пост, и ответы мне не помогли, но я смог понять, почему он дал мне ошибку. У меня есть
Проблема заключалась в том, что я скопировал приведенный выше код для использования в функции и случайно добавил код с помощью вкладки. Необходимо убедиться, что последний EOF не содержит вкладок.
источник
EOF
отступ в четыре пробела, и из-за этого bash его не разбирал. Удаление пробелов устранило проблему.У меня возникла проблема, когда я написал оператор «if-fi» в одну строку:
Напишите многострочное решение моей проблемы:
источник
Это происходило со мной, когда я пытался вызвать функцию, используя скобки, например
должно быть:
источник
ДЛЯ WINDOWS:
В моем случае я работал в ОС Windows и получил ту же ошибку при запуске autoconf.
Затем я преобразовал файл с преобразованием EOL в Windows (CR LF) следующим образом:
РЕДАКТИРОВАТЬ -> КОНВЕРСИЯ EOL -> WINDOWS (CR LF)
источник
Мне удалось вырезать и вставить ваш код в файл, и он работал правильно. Если вы выполните это так, он должен работать:
Ваш "file.sh":
Команда:
Обратите внимание, что "file.sh" должен быть исполняемым:
Вы можете получить эту ошибку b / c того, как вы вводите (с трубкой, морковкой и т. Д.). Вы также можете попробовать разделить условие на два:
Или, поскольку вы используете
bash
, вы можете использовать встроенный синтаксис:И, наконец, вы можете, конечно, просто проверить, были ли указаны 3 аргумента (чистый, поддерживает совместимость с оболочкой POSIX):
источник
Как я только что обнаружил, отсутствие закрывающей скобки в определении функции вызовет эту ошибку.
Что, конечно, должно быть так ...
источник
Я просто вырезал и вставил ваш пример в файл; он отлично работал под bash. Никаких проблем с этим не вижу.
Для большей надежности вы можете убедиться, что он заканчивается новой строкой, хотя bash это не должно заботить. (Он работает для меня как с последней строкой, так и без нее.)
Иногда вы будете видеть странные ошибки, если случайно встроили в файл управляющий символ. Поскольку это короткий сценарий, попробуйте создать новый сценарий, вставив его из своего вопроса здесь, в StackOverflow, или просто повторно набрав его.
Какую версию bash вы используете? (
bash --version
)Удачи!
источник
Убедитесь, что в имени каталога, в котором находится файл .sh, нет пробела. например: Скажем, если он находится в папке с именем «Новая папка», вы обязательно столкнетесь с указанной ошибкой. Вместо этого просто назовите его «New_Folder». Надеюсь, это поможет.
источник
По-видимому, некоторые версии оболочки также могут выдавать это сообщение, когда в последней строке вашего скрипта отсутствует новая строка.
источник
В Ubuntu:
Тогда,
File -> Save as
и установитьend line
вUnix/Linux
источник
Я знаю, что опоздал на вечеринку. Надеюсь, это может кому-то помочь.
Проверьте свой файл .bashrc. Возможно, переименуйте или переместите.
Обсуждение здесь: невозможно получить простой сценарий bash
источник
Для людей, использующих MacOS:
Если вы получили файл в формате Windows и хотели запустить MacOS и увидели эту ошибку, запустите эти команды.
источник
В моем случае есть лишнее,
\
например следующее:Существует НЕ
\
в концеDATA.PATH_PREFIX ./afs/kinetics400
источник