URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4080
[ Назад ]

Исходное сообщение
"Не могу понять в чём проблема"

Отправлено gadpolzuchiy , 21-Мрт-05 04:30 
Здравствуйте!

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

#!/bin/sh
#
i=1

while [ $i -lt 254 ]
do
echo $i
i='expr $i+1'
done

Больше ничего в этом скрипте нету. При запуске выдаёт сообщение:
line 5: [: too many arguments

Помогите!!! В чём грабли?


Содержание

Сообщения в этом обсуждении
"Не могу понять в чём проблема"
Отправлено allez , 21-Мрт-05 06:14 
Посмотрите здесь: http://linuxportal.ru/forums/index.php/m/56674/
Кстати, это что, учебное задание по информатике? Скрипты совершенно
одинаковые и ошибки в них одинаковы...

"Не могу понять в чём проблема"
Отправлено gadpolzuchiy , 21-Мрт-05 07:03 
>Посмотрите здесь: http://linuxportal.ru/forums/index.php/m/56674/
>Кстати, это что, учебное задание по информатике? Скрипты совершенно
>одинаковые и ошибки в них одинаковы...

Говорит ссылка неправильная.
Это не учебное задание, просто был скрипт нарыт, автор которого утверждал в его работоспособности, при попытке запустить у себя было получено то же самое сообщение об ошибке.
Решил просто выбрабрать кусок с циклом и посмотреть, т.к. на остальное не ругалось.



"Не могу понять в чём проблема"
Отправлено allez , 21-Мрт-05 07:36 
За ссылку пардон, не до конца выделил перед копированием.
Вот так работает: http://linuxportal.ru/forums/index.php/m/56674/?
Ну и на всякий случай (если опять не сработает) объяснение:

1: #!/bin/sh
2: #
3: i=1
4:
5: while [ $i -lt 254 ]
6: do
7: echo $i
8: i='expr $i+1'
9: done

Во-первых, в строке 8 нужно исправить прямые кавычки на обратные: i=`expr $i+1`,
а во-вторых переменную i в строке 3 необходимо объявить как целочисленную: declare -i i=1.
Дело в том, что в shell-скриптах все переменные по умолчанию считаются текстовыми со всеми вытекающими последствиями.


"Не могу понять в чём проблема"
Отправлено gadpolzuchiy , 21-Мрт-05 11:04 
>За ссылку пардон, не до конца выделил перед копированием.
>Вот так работает: http://linuxportal.ru/forums/index.php/m/56674/?
>Ну и на всякий случай (если опять не сработает) объяснение:
>
>1: #!/bin/sh
>2: #
>3: i=1
>4:
>5: while [ $i -lt 254 ]
>6: do
>7: echo $i
>8: i='expr $i+1'
>9: done
>
>Во-первых, в строке 8 нужно исправить прямые кавычки на обратные: i=`expr $i+1`,
>
>а во-вторых переменную i в строке 3 необходимо объявить как целочисленную: declare
>-i i=1.
>Дело в том, что в shell-скриптах все переменные по умолчанию считаются текстовыми
>со всеми вытекающими последствиями.

Огромное спасибо!
Всё поправил и зарабоатало :)
Тогда есть ещё вопрос, где можно посмотреть какие типы можно использовать.
Вообще какой-нибудь хороший мануал по shell-скриптам.


"Не могу понять в чём проблема"
Отправлено allez , 21-Мрт-05 11:30 
>Тогда есть ещё вопрос, где можно посмотреть какие типы можно использовать.
>Вообще какой-нибудь хороший мануал по shell-скриптам.

Посмотреть можно на этом же сайте (раздел "Ссылки"): http://www.opennet.me/links/sml/16.shtml


"Не могу понять в чём проблема"
Отправлено gadpolzuchiy , 21-Мрт-05 12:16 
>>Тогда есть ещё вопрос, где можно посмотреть какие типы можно использовать.
>>Вообще какой-нибудь хороший мануал по shell-скриптам.
>
>Посмотреть можно на этом же сайте (раздел "Ссылки"): http://www.opennet.me/links/sml/16.shtml


Ещё раз спасибо. А то не знал, что и делать