The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Помогите со скриптом: unexpected end of file"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Помогите со скриптом: unexpected end of file"  
Сообщение от andrystepa (ok) on 29-Июн-06, 21:05 
Это мой первый в жизни скрипт для Bash, поэтому сильно не смейтесь :-)) Скрипт постоянно вызывает программу wget, для копирования файла с веб-сайта:

#!/bin/bash
n=0
while { $n -lt 1000}
{
wget --no-cash --output-document=/var/img/image.jpg http://192.168.0.101/image.jpg
n=$(($n+1))
}

При запуске выдает: unexpected end of file и ссылается на последнюю строчку в файле скрипта (то есть на " { " ). Что здесь неправильно, подскажите, пожалуйста.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Помогите со скриптом: unexpected end of file"  
Сообщение от __ on 29-Июн-06, 21:26 
\n


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Помогите со скриптом: unexpected end of file"  
Сообщение от jd (??) on 29-Июн-06, 23:55 
Ваш скрипт должен выглядеть так:
#!/bin/bash
n=0
while [ $n -lt 1000 ]; do # обратите внимание на пробелы в квадратных скобках
  wget --no-cash --output-document=/var/img/image.jpg http://192.168.0.101/image.jpg
  n=$((n+1))
done

А если нужно сделать бесконечный, а не длинный цикл, то вместо третьей строчки можно написать
while true; do
и соответственно никакого $n не нужно.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Помогите со скриптом: unexpected end of file"  
Сообщение от andrystepa (ok) on 30-Июн-06, 10:46 
>Ваш скрипт должен выглядеть так:
>#!/bin/bash
>n=0
>while [ $n -lt 1000 ]; do # обратите внимание на пробелы
>в квадратных скобках
>  wget --no-cash --output-document=/var/img/image.jpg http://192.168.0.101/image.jpg
>  n=$((n+1))
>done
>
>А если нужно сделать бесконечный, а не длинный цикл, то вместо третьей
>строчки можно написать
>while true; do
>и соответственно никакого $n не нужно.

С первого раза я так и написал скрипт - в соответствии с тем, что прочитал в книге Колисниченко "Linux сервер своими руками". Однако на операторы do  и done Bash ругался, говоря, что это неизвестная ему команда. Также он ругался и на квадратные скобки. В примере из man я увидел, что вместо квадратных скобок нужно фигурные, а команды после условия while надо заключить в фигурные скобки. После того как я это сделал, bash перестал ругаться на содержимое скрипта, за исключением вышеуказанного траббла.

Относительно \n - как я понимаю, это символ конца строки. Я заканчивал все строки, в том числе и последнюю, где просто стоит "{", при редактировании файла скрипта Enter'ом, так, что вроде бы скрытый символ конца строки там стоять должен. Может его надо обязательно указывать явно? И тогда где его ставить - в конце файла?


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "Помогите со скриптом: unexpected end of file"  
Сообщение от jd (??) on 30-Июн-06, 12:29 
>С первого раза я так и написал скрипт - в соответствии с
>тем, что прочитал в книге Колисниченко "Linux сервер своими руками". Однако
>на операторы do  и done Bash ругался, говоря, что это
>неизвестная ему команда. Также он ругался и на квадратные скобки.
Я не знаю, что у вас за bash, но то, что я написал, работает (скопируйте и попробуйте запустить), а то, что написали вы, извините - IMHO какая-то пурга.

>Относительно \n - как я понимаю, это символ конца строки. ...
Это всё вообще ерунда. Никакой дополнительный символ '\n' в конце сприпта не нужен. Можно вообще весь скрипт написать в одну строку. И даже если в конце этой строки не будет символа '\n' всё будет прекрасно работать. Только ';' где нужно добавить и всё.

Что же касается "unexpected end of file", то это значит "неожиданный конец файла", то есть не хватает какой-то конструкции, которая предполагается другой, имеющей место конструкцией. В данном случае, видимо, while.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "Помогите со скриптом: unexpected end of file"  
Сообщение от andrystepa (ok) on 30-Июн-06, 15:52 
>>С первого раза я так и написал скрипт - в соответствии с
>>тем, что прочитал в книге Колисниченко "Linux сервер своими руками". Однако
>>на операторы do  и done Bash ругался, говоря, что это
>>неизвестная ему команда. Также он ругался и на квадратные скобки.
>Я не знаю, что у вас за bash, но то, что я
>написал, работает (скопируйте и попробуйте запустить), а то, что написали вы,
>извините - IMHO какая-то пурга.
>
>>Относительно \n - как я понимаю, это символ конца строки. ...
>Это всё вообще ерунда. Никакой дополнительный символ '\n' в конце сприпта не
>нужен. Можно вообще весь скрипт написать в одну строку. И даже
>если в конце этой строки не будет символа '\n' всё будет
>прекрасно работать. Только ';' где нужно добавить и всё.
>
>Что же касается "unexpected end of file", то это значит "неожиданный конец
>файла", то есть не хватает какой-то конструкции, которая предполагается другой, имеющей
>место конструкцией. В данном случае, видимо, while.

Спасибо. Скопировал, и все заработало! Долго сравнивал со своим первым творением - различий не нашел, разве что пробелы в квадратных скобках в условии while. Може все из-за этого. Не глюк же мне приснился, в конце концов, я ясно видел ответ bash - неизвестная команда 'do'.
В общем, все решилось. Спасибо.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

6. "Помогите со скриптом: unexpected end of file"  
Сообщение от jd (??) on 30-Июн-06, 19:50 
Пробелы внутри квадратных скобок нужны ОБЯЗАТЕЛЬНО: и после открывающей, и перед закрывающей.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

7. "Помогите со скриптом: unexpected end of file"  
Сообщение от jd (??) on 30-Июн-06, 20:00 
Логика здесь такова. Общий формат while: while COMMAND; do LIST; done
Квадратная скобка - это команда, агрументами которой является всё, вплоть до (и включая) закрывающей скобки. То есть в данном случае у команды '[' 4 аргумента: '$n',  '-lt', '1000' и ']'. В сущности последний аргумент (закрывающая квадратная скобка) введён скорее всего просто для лучшей читаемости.
Также существует альтернатива (синоним) квадратным скобкам - команда test, но квадратные скобки по-моему как-то лучше читаются.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру