Shell скрипт

Privezentsev

Как написать его в линухе, в частности, у меня проблема с циклом. Как ему задать, что переменная изменяется от такого до такого значения с таким то шагом?

skvoria

Берешь какое нибудь руководство, типа
http://www.linux.org.ru/books/shellprog.html
и читаешь.

Privezentsev

у меня есть книга на руках и если бы было все так простл, я бы не спрашивала.

Olenenok

странно, что тебе понадобилось пробегать последовательность членов арифметической прогрессии.
опиши, в чём состоит задача
Но если вдруг действительно нужны числа (обычно это для заполнения файлов то ботай
man seq
Пример:

for i in `seq 0 1 200`; do
echo $i
done

Privezentsev

Блин, ну неужели так сложно ответить. Сразу становиться понятно, что наверняка, вы и сами то не знаете.

Olenenok

пост дилитед бай Джо_Бишоп

Privezentsev

Да не, сорри. Просто я злюсь.
Мне надо написать цикл, чтобы запускать пинг при разных параметрах.

Privezentsev

Poster:
Subject: Re: Shell скрипт
сама дура
Я тебя обожаю. У меня похоже все заработало

RomanLeon

синтаксис bash (скорее он то и стоит) очень похож на С и perl, с учетом того, что можно выполнять команды окружения прямо из скрипта

Ivan8209

> for i in `seq 0 1 200`; do
Всё время радуют такие люди, которые не задумываются,
что seq может выдать чуть больше, чем 16384 или сколько
там в линуксе строк.
---
"Аллах не ведёт людей неверных."

Olenenok

кохтпа, не придумывай

sergey_m

Кохтпа всё правильно сказал. Такой метод организации цикла - неправильный.

Ober

Такой метод организации цикла - неправильный.
+1.

Olenenok

seq _0_ _1_ _200_
всего будет выведено100-200 - 101 слово по 3 знака. потом 10-99 - 89 слов по 2 знака, и 10 слов по одному знаку. Итого: в словах будет 303+178+10=491 знак в этих словах. Прибавим 201 символ разделения, даже 3*201. Будет 491+603=1094 знака, что намного меньше чем 16384
ЗЫ
про

i=0
while [ $i -le 200 ]; do
........
i = $i+1
done

я конечно знаю, только букав много, имхо

Ivan8209

В исходной постановке вопроса не упомянуты ограничения,
если бы ты сразу сказал, что твоё решение для коротких
циклов, то и нареканий не возникло бы.
---
"Аллах не ведёт людей неверных."

disna

еще так можно

for i=0; i<200 ; i++
do
...
done

Marinavo_0507

$ for i in `seq 0 100000` ; do echo $i ; done | tail
99991
99992
99993
99994
99995
99996
99997
99998
99999
100000

Что я делаю не так?

sergey_m

А линуксоиды опять забывают про то, что bash это не POSIX shell.

AlexV769

~>for i in `seq 0 100000` ; do echo $i ; done | tail
zsh: command not found: seq

а я что неверно делаю?

Marinavo_0507

это интерикс что ли?

AlexV769

Да не сказал бы
~>uname -a
FreeBSD gw.cars 6.2-PRERELEASE FreeBSD 6.2-PRERELEASE Tue Nov 14 15:16:28 MSK 2006 carsgate:/usr/obj/usr/src/sys/CARSGATE i386

Marinavo_0507

> а я что неверно делаю?
> FreeBSD

banderon

Просто замечание KOHTPы хоть и верное, но в данном случае неприменимо.

stm7583298

works for me
никогда не подводило

sergey_m

seq не является POSIX утилитой. Вы уж уважаемые линуксоиды пишите сабжекты правильно. Вместо слова sh пишите bash, вместо слова UNIX пишите Linux (GNU coreutils).

Marinavo_0507

Ща, начну менять чужие сабжи ради нескольких фанатов, которые не используют bash и seq по религиозным причинам
Слова UNIX в треде вообще не появлялось до тебя, тебе померещилось.
Слово Linux было честно в первом посте.

sergey_m

не используют bash и seq по религиозным причинам
Во-первых, не путай религиозные с лицензионными. Во-вторых, причина иная. Причина в том, что есть sh и jot ещё с восимедесятых годов. Заменять более POSIX-complaint sh на менее POSIX-complaint bash, который ещё и больше жрёт памяти, течёт и падает в кору могут только гну-фанатики. Что же до jot, то c какого хуя добавлять лишнюю команду seq, из-за того, что какой-то студент фанат линукса поленился узнать о том, что существует в мире перед тем как изобретать свой велосипед?

Marinavo_0507

> Причина в том, что есть sh и jot ещё с восимедесятых годов.
Если бы ты первым предложил решение на их основе, понты были бы зачтены. А так - не впечатляет.
> Во-первых, не путай религиозные с лицензионными.
Именно религиозные.
Лицензия не запрещает использовать bash и seq на FreeBSD.

Ivan8209


HISTORY
The seq command first appeared in Plan 9 from Bell Labs. A seq command
appeared in NetBSD 3.0. This command was based on the command of the
same name in Plan 9 from Bell Labs and the GNU core utilities. The GNU
seq command first appeared in the 1.13 shell utilities release.

---
"This user is BSD-compliant."

Ivan8209

> Лицензия не запрещает использовать bash и seq на FreeBSD.
В обратную сторону, в отношении sh и jot --- тоже. Однако?
---
...Я работаю антинаучным аферистом...

sergey_m

> Если бы ты первым предложил решение на их основе, понты были бы зачтены. А так - не впечатляет.
А понтов никаких нет. Я просто давно имею привычку обламывать треды, которые якобы посвящены sh-программированию, а на самом деле оказываются bash-программированием, причём постоянно с использованием linux-специфичных утилит.
Тем более, что я против решения на jot, по причинам, по которым КОНТРА против seq.
> Лицензия не запрещает использовать bash и seq на FreeBSD.
Она накладывает условия, не позволяющие включить в состав FreeBSD.

sergey_m

HISTORY
The seq command first appeared in Plan 9 from Bell Labs.
А у меня вот (в Fedora Core написано вот так:

AUTHOR
Written by Ulrich Drepper.

REPORTING BUGS
Report bugs to <bug-gnu.org>.

COPYRIGHT
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.

Marinavo_0507

> Она накладывает условия, не позволяющие включить в состав FreeBSD.
Если ограничиться только софтом, который "включен в состав", даже world не собрать

Marinavo_0507

> Я просто давно имею привычку обламывать треды
Ты никого не обломал, тут все уже свои циклы написали как хотели.

Ivan8209

Ну, я не спорю, что первенство принадлежит jot, который сходу
прослеживается до 93-го года. По крайней мере, пока принадлежит.
---
...Я работаю антинаучным аферистом...

Ivan8209

>> Она накладывает условия, не позволяющие включить в состав FreeBSD.
> Если ограничиться только софтом, который "включен в состав",
> даже world не собрать
"Работы ведуться!"
---
...Я работаю антинаучным аферистом...

Marinavo_0507

В обратную сторону, в отношении sh и jot --- тоже. Однако?
В моём дистрибутиве эти штуки есть.
Я их сейчас на всякий случай поставил - вдруг напишет какой-нибудь полезный скрипт с использованием кошерных утилит

Marinavo_0507

> "Работы ведуться!"
Они пишут кошерный компилятор? Хорошо бы, только что-то на сайте не нашёл упоминания о таком деле.

sergey_m

Да это Кохтпа пёрнул мозгом.

Ivan8209

>> "Работы ведуться!"
> Они пишут кошерный компилятор? Хорошо бы, только
> что-то на сайте не нашёл упоминания о таком деле.
Гоям не обязательно знать, кто и где пишет кошерный компилятор.
Кошерный компилятор пишут тут.
---
"Аллах не ведёт людей неверных."

Marinavo_0507

> Причина в том, что есть sh и jot ещё с восимедесятых годов.
bash появился в 1987г, а то, что ты называешь sh - в 1989
до этого был некошерный AT&T Borne Shell
> Заменять более POSIX-complaint sh на менее POSIX-complaint bash
Во-первых, никто не заменял, bash был перенесён Линусом сразу.
Во-вторых, а какие ты знаешь несовместимости bash с POSIX?

Ivan8209

Не истины ради, а токмо флейму для.
> синтаксис bash (скорее он то и стоит) очень похож на С
Это у bash-то синтаксис похож на С?!
Это у csh синтаксис похож на С!
---
"This user is BSD-compliant."

sergey_m

> Во-первых, никто не заменял, bash был перенесён Линусом сразу.
Проверь тред, речь о другом. Ты сказал, что религиозные соображения не дают его включить в FreeBSD. Я сказал, что заменять sh на bash никто не будет.
> Во-вторых, а какие ты знаешь несовместимости bash с POSIX?
Как минимум задокументированные в файле POSIX, в сорцах bash.
P.S. Ни разу не видел, чтобы кто-то писал #!/bin/bash --posix.

Ivan8209

> #!/bin/bash --posix
Разве не кошернее писать "#!/usr/bin/env bash --posix"?
---
"This user is BSD-compliant."

RomanLeon

Это у bash-то синтаксис похож на С?!
Это у csh синтаксис похож на С!
ну епрст, ну не на псакаль же он похож! просто степень похожести разная

Marinavo_0507

> Ты сказал, что религиозные соображения не дают его включить в FreeBSD.
Неа, я такого не говорил.
Я говорил, что тебе они мешают его использовать для исполнения скриптов. Ничего заменять для этого не надо.
> Как минимум задокументированные в файле POSIX, в сорцах bash.
Надо же, 3 штуки. Сложно представить, чтобы в реальном скрипте что-то из этого использовалось - по крайней мере я таких не видел.
> P.S. Ни разу не видел, чтобы кто-то писал #!/bin/bash --posix.
А и не надо, можно ведь написать #!/bin/sh

kruzer25

А линуксоиды опять забывают про то, что bash это не POSIX shell.
Ну в нём же типо есть ержим совместимости?

sergey_m

Надо же, 3 штуки. Сложно представить, чтобы в реальном скрипте что-то из этого использовалось - по крайней мере я таких не видел.
И ещё 32 штуки, которые не работают по дефолту, приучая линуксоидов к непортабельному программированию.
А и не надо, можно ведь написать #!/bin/sh
Действительно приятная новость.

Marinavo_0507

> приучая линуксоидов к непортабельному программированию.
какое же непортабельное?
bash ставится одной командой

Marinavo_0507

> Действительно приятная новость.
Подозреваю, что этой новости лет 15.

sergey_m

какое же непортабельное?
bash ставится одной командой
Это когда человек возьмёт скрипт, который начинается на !#/bin/sh, а скрипт не будет работать. Про то, что такое bash человек может не знать.

Marinavo_0507

Это когда человек возьмёт скрипт, который начинается на !#/bin/sh, а скрипт не будет работать.
А прикинь, если человек возьмёт программу hello.c, а она не компилируется. Потому что не на ANSI С написана, а для какой-то реальной системы, например FreeBSD. Что теперь, для FreeBSD новое расширение для С-программ изобретать?

Ivan8209

>> Это у bash-то синтаксис похож на С?!
>> Это у csh синтаксис похож на С!
> ну епрст, ну не на псакаль же он похож!
> просто степень похожести разная
Ага, встроеный язык BIND очень похож на С, даже скобочки те же.
---
...Я работаю антинаучным аферистом...

Ivan8209

>> Это когда человек возьмёт скрипт, который начинается на
>> #!/bin/sh, а скрипт не будет работать.
> А прикинь, если человек возьмёт программу hello.c,
> а она не компилируется. Потому что не на ANSI С написана,
> а для какой-то реальной системы, например FreeBSD.
В GNU не присутствует функций, отсутствующих в стандарте ANSI C?
/bin/sh, вообще-то, зарезервирован для POSIX sh.
А вообще, это та же проблема с кривонаписанным софтом,
что и вбитые пути к файлам.
> Что теперь, для FreeBSD новое расширение для С-программ изобретать?
А что такое расширение?
---
...Я работаю антинаучным аферистом...

Marinavo_0507

> /bin/sh, вообще-то, зарезервирован для POSIX sh.
Ну я не спорю, что писать /bin/sh и использовать расширения bash - нехорошо.
Однако, в этом треде подобных скриптов не было, а всё равно взялся кого-то обламывать

Marinavo_0507

> В GNU не присутствует функций, отсутствующих в стандарте ANSI C?
Они даже в POSIX присутствуют.
А файлы всё равно называют *.c , что для GNU, что для FreeBSD.
Иногда даже пишут где-нибудь рядом в мейкфайле, что нужно компилировать их c помощью cc.

Ivan8209

>> В GNU не присутствует функций, отсутствующих в стандарте ANSI C?
> Они даже в POSIX присутствуют.
> А файлы всё равно называют *.c , что для GNU, что для FreeBSD.
Ну так проблема-то общая для всех ОС, где метаинформация
может быть оторвана от данных.
> Иногда даже пишут где-нибудь рядом в мейкфайле,
> что нужно компилировать их c помощью cc.
В наших краях их принято компилировать с помощью make и ${CC}.
---
"Аллах не ведёт людей неверных."

sergey_m

А прикинь, если человек возьмёт программу hello.c, а она не компилируется. Потому что не на ANSI С написана, а для какой-то реальной системы, например FreeBSD.
И что? Где здесь FreeBSD приучает к непортабельному программированию? Я вот привёл конкретный пример, что по-дефолту отключенная POSIX совместимость в bash приучает к непортабельному программированию.

Marinavo_0507

> Где здесь FreeBSD приучает к непортабельному программированию?
Ну типа используюешь функцию, например, open(2) и флаг O_RDONLY.
А в ANSI такого не положено.

sergey_m

Чо за бред? ANSI вообще не касается системного API, а касается только синтаксиса языка.

Marinavo_0507

> ANSI вообще не касается системного API, а касается только синтаксиса языка.
Однако fopen там есть.

Ivan8209

>> ANSI вообще не касается системного API,
> Однако fopen там есть.
Однако fopen не относится к системному, вернее, ядерному API.

STANDARDS
The fopen and freopen functions conform to ANSI X3.159-1989
(``ANSI C89''). The fdopen function conforms to ISO/IEC 9945-1:1990
(``POSIX.1'').

---
...Я работаю антинаучным аферистом...

Marinavo_0507

> Однако fopen не относится к системному, вернее, ядерному API.
Кому от этого легче?

Ivan8209

>> Однако fopen не относится к системному, вернее, ядерному API.
> Кому от этого легче?
Линуксу!
---
A9: ОС - это БЗДя
Оставить комментарий
Имя или ник:
Комментарий: