Цикл в Bash: синтаксическая ошибка: неожиданный конец файла - PullRequest
4 голосов
/ 04 марта 2012

Я новичок в этом материале Bash / Shell и должен выполнить некоторый сетевой анализ для универсального назначения.

Просто пытаюсь сделать простой цикл, но получаю странную ошибку, которую не удалось исправить, несмотря на2 часа сканирования Google:

#!/bin/bash
x=1
while [ $x -le 5 ]
do
  echo "Welcome $x times"
  x=$(( $x + 1 ))
done

Я пытался использовать цикл for, используя следующий синтаксис:

#!/bin/bash
for i in {1..5}
do
   echo "Welcome $i times"
done

Всякий раз, когда я размещаю первый скрипт на моем сервере, я получаю следующее сообщение:

./temp.sh: line 8: syntax error: unexpected end of file

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

ls -l temp.sh
chmod +x temp.sh

Так же, как примечание, я нашел следующий вопрос stackoverflow о циклах, скопировал «исправленный код» и получил ту же ошибку: Зацикливание сценария Bash Shell

Я работаю в версии 4+ и использую G-VIM в качестве текстового редактора в Windows 7. Кто-нибудь получилкакие-нибудь идеи?

УДЕЛЕНО ДЛЯ РЕШЕНИЯ ЭТОГО СЕБЯ:

Видя, что моя репутация все еще слишком низка, я не могу ответить на это сам в настоящее времячтобы остановить людейЧто ж, время здесь, вот как я это исправил:

Хорошо, мне удалось это исправить, поэтому оставлю это для всех, кто осмотрится вокруг.

Моя проблема заключалась в том, что я использовал FileZillaподключиться к моему серверу.Кажется, что даже когда я использовал WinVi или G-Vim для создания файлов, FileZilla добавляла некоторую форму дополнительных символов в конец моего файла, когда я переносила его на сервер, когда я работала под Windows.

Iпереключился на WinSCP в качестве агента соединения и попробовал его, и эй Престо работал нормально.

Спасибо за другие ответы.

Льюис

Ответы [ 4 ]

2 голосов
/ 04 марта 2012

перед запуском bash-скрипта используйте команду dos2unix

dos2unix <bashScript>
./<bashScript>
1 голос
/ 24 ноября 2014

Хорошо, мне удалось это исправить, поэтому оставлю это для всех, кто осмотрится вокруг.

Моя проблема заключалась в том, что я использовал FileZilla для подключения к своему серверу.Кажется, что даже когда я использовал WinVi или G-Vim для создания файлов, FileZilla добавляла некоторую форму дополнительных символов в конец моего файла, когда я переносила его на сервер, когда я работала под Windows.

Iпереключился на WinSCP в качестве моего агента подключения и попробовал его, и эй presto работал нормально.

0 голосов
/ 31 августа 2013

У меня тоже есть эта проблема. На самом деле решение этой проблемы заключается в написании проверки скрипта в меню редактирования. Конвертация EOL в формате Unix или нет. Это должен быть формат Unix для скрипта оболочки.

0 голосов
/ 04 марта 2012

У вас есть перевод строки после done? Это может быть причиной проблемы.

Работает ли он с bash в Cygwin на вашей машине? (Должно быть; он отлично работает при копировании на мой Mac, например, с любым из sh, bash или ksh, на котором он запущен.)

...