Возник трабл...
При выводе переменной, которую вычисляю в цикле, пусто. Кажется что она имеет некое значение только в гранях do.....done, т. к. вывод там работает.
Ничего умного в голову не приходит....(( Кто-нибудь может стыкался с таким траблом....
Вывод переменной из цикла while
Модератор: Модераторы разделов
-
broom
- Бывший модератор
- Сообщения: 1629
- Статус: мизантроп.ка
- ОС: Gentoo
Re: Вывод переменной из цикла while
Встречалось такое, да. Но я не разобралась, баг это или фича.
Покажите ваш скрипт, мне удалось решить проблему составлением немного другой конструкции.
Покажите ваш скрипт, мне удалось решить проблему составлением немного другой конструкции.
but in the darkness, behind your smile, you scream... © Dio
-
Voice
- Сообщения: 1073
- Статус: столлманист
- ОС: Debian GNU/Linux
Re: Вывод переменной из цикла while
Да вроде как работает...
Код: Выделить всё
[user@foo tmp] $ cat foo.sh
#!/bin/bash
i=0
while [ $i -lt 10 ]
do
i=$(($i + 1))
done
echo $i
[user@foo tmp] $ bash foo.sh
10
[user@foo tmp] $"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
CoffiN
- Сообщения: 11
Re: Вывод переменной из цикла while
Voice писал(а): ↑09.12.2008 17:47Да вроде как работает...
Код: Выделить всё
[user@foo tmp] $ cat foo.sh #!/bin/bash i=0 while [ $i -lt 10 ] do i=$(($i + 1)) done echo $i [user@foo tmp] $ bash foo.sh 10 [user@foo tmp] $
Завидую....))
Встречалось такое, да. Но я не разобралась, баг это или фича.
Покажите ваш скрипт, мне удалось решить проблему составлением немного другой конструкции.
Код: Выделить всё
echo "select lost from $TABLE where login = '$LOGIN';" | mysql -h $IP_ADDR -u $USER_NAME -p$PASSWORD $BASE_NAME | while read l
do
if echo $l | grep -q "lost"
then kilkist=0
summ=0
else kilkist=`expr $kilkist + 1`
summ=`expr $summ + $l`
fi
#ser=`expr $summ / $kilkist`
#echo "$ser"
done
if echo $n | grep -q PPPoE
then ser=`expr $summ / $kilkist`
echo "insert into top20
values('$DT','$LOGIN','$IP',NULL,'$summ',NULL);" | mysql -h $IP_ADDR -u $USER_NAME -p$PASSWORD $BASE_NAME
fiПример НЕ рабочего кода..... $summ и $kilkist во время расчета пустые.....(( Закоментырованые "#ser=`expr $summ / $kilkist`" и "#echo "$ser"" - работают.
-
broom
- Бывший модератор
- Сообщения: 1629
- Статус: мизантроп.ка
- ОС: Gentoo
Re: Вывод переменной из цикла while
Нашла, что у меня не работало.
Вот так переменные оставались только внутри цикла:
А так нормально:
Видимо, фигня возникает, когда направляешь что-то в while через конвейер...
Вот так переменные оставались только внутри цикла:
cat settings.txt | while read -r line; do export "$line"; done
А так нормально:
while read -r line; do export "$line"; done < settings.txt
Видимо, фигня возникает, когда направляешь что-то в while через конвейер...
but in the darkness, behind your smile, you scream... © Dio
-
CoffiN
- Сообщения: 11
Re: Вывод переменной из цикла while
broom писал(а): ↑09.12.2008 18:16Нашла, что у меня не работало.
Вот так переменные оставались только внутри цикла:
cat settings.txt | while read -r line; do export "$line"; done
А так нормально:
while read -r line; do export "$line"; done < settings.txt
Видимо, фигня возникает, когда направляешь что-то в while через конвейер...
Редирект не работает, инфу беру из БД..... Неужели придется шаманить что-то, чобы выбросить этот цикл...((
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Вывод переменной из цикла while
во-первых, попробуйте инициализировать переменные до цикла.
во-вторых, вы точно уверенны что эти переменные в обязательном порядке надо обнулять ежели lost в текущей строке выборки не найдено(правда тогда это все заменяется простым sql-запросом).
в текущем виде можно перерисовать в что-то типа:
Код: Выделить всё
echo "select lost from $TABLE where login = '$LOGIN';" | mysql -h $IP_ADDR -u $USER_NAME -p$PASSWORD $BASE_NAME | awk 'BEGIN{summ=0} $1~/lost/{summ += 1} $1 !~ /lost/ {summ = 0}; END{print summ}'or smth like, и получить вывод в переменную:
Код: Выделить всё
var = $(echo "select lost from $TABLE where login = '$LOGIN';" | mysql -h $IP_ADDR -u $USER_NAME -p$PASSWORD $BASE_NAME | awk 'BEGIN{summ=0} $1~/lost/{summ += 1} $1 !~ /lost/ {summ = 0}; END{print summ}');не тестил...
ser=`expr $summ / $kilkist` если переменная таки 0, кстати, будет весьма колоритно смотреться