Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Цикл for в sh

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Прочее] >> Цикл for в sh
Имя
Сообщение << Старые топики   Новые топики >>
Цикл for в sh - 2009-04-02 12:57:03.400000   
SoldierASP

Сообщений: 17
Оценки: 0
Присоединился: 2008-08-13 10:38:37.486666
Доброго всем времени суток.
Хотел написать скрипт (не важно его содержимое) для sh (FreeBSD).
Что я не пробовал - не получается его заставить работать правильно.
Мне необходим цикл с инкрементом, т.е. как в с++:
for(i=0;i&lt;10;i++)
на шеле делал подобное - не работает.
Пробовал в while - тоже не помогло. Объясните как правильно написать цикл для shell?
Если есть примеры, то поделитесь.

Заранее благодарен.
Post #: 1
RE: Цикл for в sh - 2009-04-02 16:37:05.673333   
tеstеr

Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
Вот пример скрипта, который копирует все текстовые файлы в резервные копии.

ls *.txt &gt; listTxtFiles
for i in 'cat listTxtFiles'; do cp "$i" "$i".bak ; done

общий формат команды такой:
for NAME [in LIST ]; do COMMANDS; done

for &lt;переменная&gt; [ in &lt;набор&gt; ]
do
&lt;список&gt;
done


Если часть in &lt;набор&gt; опущена, то это означает in "$@" ( то есть in $1 $2 … $n). Пример. Вывести на экран все файлы с расгирением sh из текущей папки:
for f in *.for
do
cat $f
done


Интерпретатор командного языка shell
Post #: 2
RE: Цикл for в sh - 2009-04-02 18:00:31   
SoldierASP

Сообщений: 17
Оценки: 0
Присоединился: 2008-08-13 10:38:37.486666
А если мне надо не файлы перебирать а числа.
Ниже приведу пример:
#./cat for #!/bin/sh for (( c=0; $c&lt;5; c=$c+1 )); do echo $c done не хочет работать. Пишет вот что:
# ./for ./for: 3: Syntax error: Bad for loop variable
у мнегох это в sh работает у меня не хочет. Я понимаю, что если мне указать числа от 1 до 5, то это еще нормально. а что если мне надо будет указать числа от 1 до 255? целых 3 ряда занять? :)

При попытке выполнить:
for c in $1 $2 ... $5 do echo $c done
получил не менее забавный вывод:
# ./for ...
Post #: 3
RE: Цикл for в sh - 2009-04-02 18:41:53.326666   
tеstеr

Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
Команда expr + цикл while

получится так (наверно):
c = 255
while 'expr $c &gt; 0'
do
echo $c
c = 'expr $c - 1'
done
Post #: 4
RE: Цикл for в sh - 2009-04-02 19:26:39.186666   
SoldierASP

Сообщений: 17
Оценки: 0
Присоединился: 2008-08-13 10:38:37.486666
Набрал:
# cat catfile c = 10 while 'expr $c &gt; 0' do echo $c c = 'expr $c - 1' done
выполнил и получил ответ:
c: not found expr $c &gt; 0: not found
теперь я вообще ничего не понял
Post #: 5
RE: Цикл for в sh - 2009-04-02 19:45:19.666666   
tеstеr

Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
#!/bin/sh
c=255
while expr $c &gt; 0
do
echo $c
c=$(($c - 1))
done

===============

#!/bin/sh
n=0
while test $n -le 255
do
echo $n
n=$(($n + 1))
done
Post #: 6
RE: Цикл for в sh - 2009-04-02 20:41:23.483333   
SoldierASP

Сообщений: 17
Оценки: 0
Присоединился: 2008-08-13 10:38:37.486666
Выполнил.
Вот результат:
: 22: Syntax error: "(" unexpected (expecting ")")
Post #: 7
RE: Цикл for в sh - 2009-04-03 10:50:37.193333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
for ((i=0; i&lt;10; i++)); do echo $i; done
Post #: 8
Страниц:  [1]
Все форумы >> [Прочее] >> Цикл for в sh







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.