The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Цикл WHILE в SHELL"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Цикл WHILE в SHELL"
Сообщение от Yurijs emailИскать по авторуВ закладки on 23-Дек-02, 19:35  (MSK)
Вопрос по работе цикла.
Этот скрипт считает количество строк в файле,
имя которого получает как парамет.

#!/bin/sh
COUNTER=0
while read TEXTLINE
do
COUNTER=`expr $COUNTER + 1`
echo $COUNTER
done < $1
echo "TOTAL: $COUNTER"

Ниже результат работы.
Почему обнулилась переменная при выходе из цикла ?
И как это предотвратить ?

1
2
3
TOTAL: 0

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

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

1. "RE: Цикл WHILE в SHELL"
Сообщение от Vladislav emailИскать по авторуВ закладки on 24-Дек-02, 09:21  (MSK)
>Вопрос по работе цикла.
>Этот скрипт считает количество строк в файле,
>имя которого получает как парамет.
>
>#!/bin/sh
>COUNTER=0
>while read TEXTLINE
>do
>COUNTER=`expr $COUNTER + 1`
>echo $COUNTER
>done < $1
>echo "TOTAL: $COUNTER"
>
>Ниже результат работы.
>Почему обнулилась переменная при выходе из цикла ?
>И как это предотвратить ?
>
>1
>2
>3
>TOTAL: 0

странный скрипт .. у меня вообще такой не работает :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: Цикл WHILE в SHELL"
Сообщение от LS Искать по авторуВ закладки on 29-Дек-02, 12:38  (MSK)
>Вопрос по работе цикла.
>Этот скрипт считает количество строк в файле,
>имя которого получает как парамет.
>
>#!/bin/sh
>COUNTER=0
>while read TEXTLINE
>do
>COUNTER=`expr $COUNTER + 1`
>echo $COUNTER
>done < $1
>echo "TOTAL: $COUNTER"
>
>Ниже результат работы.
>Почему обнулилась переменная при выходе из цикла ?
>И как это предотвратить ?
>
>1
>2
>3
>TOTAL: 0


утверждать не берусь, так как в основном с bash работаю, но есть подозрение, что при перенапралении ввода обработка цикла происходит в сабшелле. и изменяешь ты внутри цикла переменную этого сабшелла, которая при выходе из него просто перестает существовать. попробуй так:

#!/bin/sh
COUNTER=0

function fff()
{
while read TEXTLINE | return $COUNTER
do
COUNTER=`expr $COUNTER + 1`
echo $COUNTER
done < $1
}

fff
echo "TOTAL: $?"


PS в bash'е твой скрипт нормально отрабатывает. там похожая ситуация возникает только если пайпы использовать (cat $1 | while ...), а при
"< $1" - все хорошо

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: Цикл WHILE в SHELL"
Сообщение от LS Искать по авторуВ закладки on 29-Дек-02, 12:42  (MSK)
>#!/bin/sh
>COUNTER=0
>
>function fff()
>{
>while read TEXTLINE | return $COUNTER
>do
>COUNTER=`expr $COUNTER + 1`
>echo $COUNTER
>done < $1
>}
>
>fff

тут должно быть fff $1

>echo "TOTAL: $?"

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: Цикл WHILE в SHELL"
Сообщение от joker Искать по авторуВ закладки on 29-Дек-02, 14:07  (MSK)
а юзать wc уже не модно ?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: Цикл WHILE в SHELL"
Сообщение от LS Искать по авторуВ закладки on 29-Дек-02, 14:14  (MSK)
>а юзать wc уже не модно ?

а это смотря, что сделать надо. если просто количество строк посчитать, то несомненно через wc легче, а если паралельно с подсчетом еще и их обработку производить - тут wc не помошник. спрашивали же почему скрипт не работает, а не как количество строк в файле подсчитать :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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