The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Бесконечный цикл в SH"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Бесконечный цикл в SH"  +/
Сообщение от Daert on 16-Мрт-09, 18:54 
Задание такое:
Написать бесконечный цикл, который будет раз в секунду выводить постоянно увеличивающееся число (1, 2, 3, 4 ...).

вот что я наваял

#!/bin/sh
i=1
while true
do
echo $1, sleep 1
i = 'expr $1+1'
done

Укажите ошибки, и если это возможно в каком направлении двигацо... этот ли оператор цикла оптимален для этой задачи?
Заранее спасибо.

З.Ы: ногами пролшу сильно не пинать.. перывае 2 часа сижу за sh...

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

Оглавление

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


1. "Бесконечный цикл в SH"  +/
Сообщение от mikra on 16-Мрт-09, 19:34 
>[оверквотинг удален]
>do
>echo $1, sleep 1
>i = 'expr $1+1'
>done
>
>Укажите ошибки, и если это возможно в каком направлении двигацо... этот ли
>оператор цикла оптимален для этой задачи?
>Заранее спасибо.
>
>З.Ы: ногами пролшу сильно не пинать.. перывае 2 часа сижу за sh...

Если код делает то что надо, значит ошибок нет и задача решена.
Критерии оптимальности не заданы, обратись к лекциям.

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

2. "Бесконечный цикл в SH"  +/
Сообщение от Daert on 16-Мрт-09, 19:43 
>[оверквотинг удален]
>>
>>Укажите ошибки, и если это возможно в каком направлении двигацо... этот ли
>>оператор цикла оптимален для этой задачи?
>>Заранее спасибо.
>>
>>З.Ы: ногами пролшу сильно не пинать.. перывае 2 часа сижу за sh...
>
>Если код делает то что надо, значит ошибок нет и задача решена.
>
>Критерии оптимальности не заданы, обратись к лекциям.

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

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

3. "Бесконечный цикл в SH"  +/
Сообщение от ANF email on 16-Мрт-09, 20:30 
Считаем сколько ошибок в сообщении, при таком отношении и в скрипте будет тоже самое.
Без проверки и нечего даже мечтать о работоспособности.
VMWare легко ставится, также легко можно и небольшую Линукс OS поставить.
По скриптику - синтаксис и невнимательность.
Имя переменной одно, в цикле другое.
Команды между собой разделяются не запятой, а точкой с запятой.
Кавычки при выполнении команды и назначении значения переменной не те.
Пробелы при суммировании.
Итого имеем -

#!/bin/sh
i=1
while true
do
echo $i; sleep 1
i=`expr $i + 1`
done

Если желаем писать проги в будущем - учимся быть во всём внимательным.

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

5. "Бесконечный цикл в SH"  +/
Сообщение от Pahanivo email(ok) on 17-Мрт-09, 08:47 
>[оверквотинг удален]
>#!/bin/sh
>i=1
>while true
>do
>echo $i; sleep 1
>i=`expr $i + 1`
>done
>
>Если желаем писать проги в будущем - учимся быть во всём внимательным.
>

этот цикл может быть только псевдо-бесконечным ))
ибо данные (переменная) имеют ограниченную разрядность ))
некоректная задача. надо как минимум еще проверять допустимый максимум и обнулять счетчик.

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

6. "Бесконечный цикл в SH"  +/
Сообщение от Andrey Mitrofanov on 17-Мрт-09, 10:20 
>этот цикл может быть только псевдо-бесконечным ))
>ибо данные (переменная) имеют ограниченную разрядность ))
>некоректная задача. надо как минимум еще проверять допустимый максимум и обнулять счетчик.

"Немного" отодвинем предел:
echo 'for(i=0;1;i++) i' |bc |while read ii; do echo "$ii"; sleep 1; done

И да, решение несколько за рамками "постановки" - bc не часть шела... Где-то тут кто-то писал арифметику на шеле? Или там тоже bc был?..

С другой стороны по одной секунде много-то и не надо: уних-тайм с 70-го года не переполнился ешё. %)

ЗЫ: Задача: дождаться тепловой смерти Вселенной, выводя i+1 раз в секунду... На шеле, конечно же! ;)

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

7. "Бесконечный цикл в SH"  +/
Сообщение от Pahanivo email(ok) on 17-Мрт-09, 10:52 
>[оверквотинг удален]
>
>И да, решение несколько за рамками "постановки" - bc не часть шела...
>Где-то тут кто-то писал арифметику на шеле? Или там тоже bc
>был?..
>
>С другой стороны по одной секунде много-то и не надо: уних-тайм с
>70-го года не переполнился ешё. %)
>
>ЗЫ: Задача: дождаться тепловой смерти Вселенной, выводя i+1 раз в секунду... На
>шеле, конечно же! ;)

))) еще на два слишним раза (учитавая текущие колво сек эпохи) хватит 32-битного счетчика )))

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

8. "Бесконечный цикл в SH"  +/
Сообщение от const86 (ok) on 17-Мрт-09, 11:50 
>>этот цикл может быть только псевдо-бесконечным ))
>>ибо данные (переменная) имеют ограниченную разрядность ))
>И да, решение несколько за рамками "постановки" - bc не часть шела... Где-то тут кто-то писал арифметику на шеле? Или там тоже bc был?..

Да всё равно упрётся в размер доступной памяти... Не судьба бесконечно единицу прибавлять :(

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

9. "Бесконечный цикл в SH"  +/
Сообщение от angra (ok) on 17-Мрт-09, 15:08 
Ну так и в начальном скрипте expr это ни разу не часть шелла и его стоило бы заменить на $(($i+1)) :)

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

10. "конечный цикл в SH"  +/
Сообщение от Andrey Mitrofanov on 17-Мрт-09, 15:29 
>Ну так и в начальном скрипте expr это ни разу не часть
>шелла и его стоило бы заменить на $(($i+1)) :)

А вдруг оно не совместимо с _его_ /bin/sh? В-) А с /bin/sh его препода -- так вообще "фиаско"...

Вот ещё башизм:
$ while((++i)); do echo $i; sleep 1; done
1
2
3
4
5
^C
$ _
Корректное :) завершение про Ctrl+C и переполнению - прилагаются.

Кстати, ближе к Смерти Вселенной вариант с bc станет "врать": выполнение read может занимать /заметно/ больше секунды... Когда и/или если +1 в bc начнёт тормозить. :D

PS: Гм, $) астрофизики в зале есть?
$ i=$((2**63-3+2**63)); while((++i)); do echo $i; done|time head -5
-2
-1
0.00user 0.00system 0:00.00elapsed 133%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+223minor)pagefaults 0swaps
$ _

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

11. "конечный цикл в SH"  +/
Сообщение от angra (ok) on 17-Мрт-09, 15:40 
Ну да, вдруг там вместо /bin/sh бейсик :)
А вообще судя по http://www.freebsd.org/cgi/man.cgi?query=sh&format=html $((expr)) это не башизм.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

13. "конченый цикл в SH"  +/
Сообщение от Andrey Mitrofanov on 17-Мрт-09, 16:04 
>Ну да, вдруг там вместо /bin/sh бейсик :)

И он тоже умеет быть позикс шеллом??! P)

>А вообще судя по
>$((expr)) это не башизм.

Ну, наверное, я в dash и tcsh как-то не так ;/ пробовал, и надо было пойти и поставить pdksh, и зря поленился.

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

14. "конечный цикл в SH"  +/
Сообщение от 0dmin on 17-Мрт-09, 21:04 
>Ну да, вдруг там вместо /bin/sh бейсик :)
>А вообще судя по http://www.freebsd.org/cgi/man.cgi?query=sh&format=html $((expr)) это не башизм.

Дык вроде Андрей не о $((expression)) говорил а о ((++i)) ... а оно башизм МАХРОВЫЙ :)

Вот это скопипасть в баш - работает, в позикс шелл - нет:
while((++i)); do echo $i; sleep 1; done

А чтобы заработало надо синтакс-шугар-фэйс-ДЕсургери сотворить:
i=0;while i=$(($i+1)); do echo $i; sleep 1; done

Как то так.

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

12. "конечный цикл в SH"  +/
Сообщение от vic (??) on 17-Мрт-09, 15:42 
while ((++i)) && echo $i && sleep 1; do continue; done

зы: главное чтобы попкорна хватило до холодца вселенной :)

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

15. "Бесконечный цикл в SH"  +/
Сообщение от n0mad email on 30-Июн-10, 23:54 
>Считаем сколько ошибок в сообщении, при таком отношении и в скрипте будет
>тоже самое.
>Без проверки и нечего даже мечтать о работоспособности.
>VMWare легко ставится, также легко можно и небольшую Линукс OS поставить.

Нафиг эти вари.... есть coLinux - дешево и сердито...

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

4. "Бесконечный цикл в SH"  +/
Сообщение от from_mars on 17-Мрт-09, 08:08 
Поставь cygwin


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

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

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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