URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7485
[ Назад ]

Исходное сообщение
"проблемка со скриптом на shell"

Отправлено Валентин , 16-Июл-08 09:13 
решил изобрести велосипед и наваять скрипт, который собирал бы статистику или другие данные с роутеров cisco.
получилось вот что:
---------------------------------------------
#!/bin/bash
path=`pwd`
spisok=$path/spisok
date=`date +%d.%m.%y`
if [ -d "$path/$date" ] ; then
:
else
    mkdir $path/$date
fi
cd ./$date

while read LINE
do
#    if [ -n "$LINE" ] ; then

#echo $LINE
       rsh -l oper $LINE show ver > $LINE
    else :
    fi
done < $spisok

cd ..
#tar -czPf cisco.$date.tar $path/$date
---------------------------------------------
в файле spisok находяцца айпишники роутеров.

прошу не ругать за корявость - он еще не закончен :)
но ! почему-то не работает цикл while read LINE при команде rsh в нем.
если вместо нее поставить эхо или отправку почты  - все отрабатывает энное количество раз, согласно количеству строк в файле spisok. ставил задержку после команды - все равно цикл заканчивается. если просто в ком.строке запустить команду - работает. кто что может подсказать ?


Содержание

Сообщения в этом обсуждении
"проблемка со скриптом на shell"
Отправлено angra , 16-Июл-08 22:05 
Когда говорите, что что-то не работает, всегда описываете какое поведение вы ожидаете и что происходит на самом деле. Если убрать проблемы с наполовину закоментаренным if, то скрипт, как я его понимаю, должен заходить на все машины из spisok, на каждой из них делать show ver и записывать результат в файл с тем же именем. Проблема с подобными конструкциями в неоднозначности интерпретации параметров локальным и удаленным шеллом, лучше всего команду брать в кавычки;
rsh -l oper $LINE 'show ver' > $LINE



"проблемка со скриптом на shell"
Отправлено Валентин , 17-Июл-08 14:18 
>Когда говорите, что что-то не работает, всегда описываете какое поведение вы ожидаете
>и что происходит на самом деле. Если убрать проблемы с наполовину
>закоментаренным if, то скрипт, как я его понимаю, должен заходить на
>все машины из spisok, на каждой из них делать show ver
>и записывать результат в файл с тем же именем. Проблема с
>подобными конструкциями в неоднозначности интерпретации параметров локальным и удаленным шеллом, лучше
>всего команду брать в кавычки;

rsh -l oper $LINE 'show ver' > $LINE

да, согласен, if закоментарен, но не в нем дело. кавычки 'show ver' тоже не решают проблему.
дето в том что при запуске один раз команда rsh выполняется, беря из файла список айпи и выдавая инфу. после этого по логике должен браться следующий айпи, но прога просто заканчивает работу, причем с кодом 0. почему - непонятно...


"проблемка со скриптом на shell"
Отправлено Arpo , 17-Июл-08 14:37 
>[оверквотинг удален]
>---------------------------------------------
>в файле spisok находяцца айпишники роутеров.
>
>прошу не ругать за корявость - он еще не закончен :)
>но ! почему-то не работает цикл while read LINE при команде rsh
>в нем.
>если вместо нее поставить эхо или отправку почты  - все отрабатывает
>энное количество раз, согласно количеству строк в файле spisok. ставил задержку
>после команды - все равно цикл заканчивается. если просто в ком.строке
>запустить команду - работает. кто что может подсказать ?

Странно что это вообще работает.
Закоменчен if, но else и fi нет...


"проблемка со скриптом на shell"
Отправлено madskull , 17-Июл-08 14:41 
>[оверквотинг удален]
>while read LINE
>do
>#    if [ -n "$LINE" ] ; then
>
>#echo $LINE
>       rsh -l oper $LINE show ver > $LINE
>    else :
>    fi
>done < $spisok
>

есть такая хрень. ssh (и иже с ними) "портит" входной поток.
рекомендую использовать форму:
for LINE in `cat $spisok`; do
....
done


"проблемка со скриптом на shell"
Отправлено Валентин , 17-Июл-08 15:21 
#!/bin/bash
path=`pwd`
spisok=$path/spisok
date=`date +%d.%m.%y`
if [ -d "$path/$date" ] ; then
:
else
    mkdir $path/$date
fi
cd ./$date
while read LINE
do
    if [ -n "$LINE" ] ; then
# start command
    rsh -l oper $LINE show ver > $LINE
# end command
    else :
    fi
done < $spisok
cd ..
tar -czPf cisco.$date.tar $path/$date

сам виноват - нераскоментил некоторые строки.
вот это скрипт, который должен работать.
работает с разными командами на месте "rsh -l oper $LINE show ver > $LINE", но с ней выполняет только первый проход. и все :(


"проблемка со скриптом на shell"
Отправлено Arpo , 17-Июл-08 15:31 
>[оверквотинг удален]
># end command
>    else :
>    fi
>done < $spisok
>cd ..
>tar -czPf cisco.$date.tar $path/$date
>
>сам виноват - нераскоментил некоторые строки.
>вот это скрипт, который должен работать.
>работает с разными командами на месте "rsh -l oper $LINE show ver > $LINE", но с ней выполняет только первый проход. и все :(

А в фаиле список все в порядке с символами конца строки??Ч
попробуйте вместо "rsh -l oper $LINE show ver > $LINE" "echo $LINE", все ли выводится так как надо???


"проблемка со скриптом на shell"
Отправлено littlevik , 19-Июл-08 07:17 
>[оверквотинг удален]
>---------------------------------------------
>в файле spisok находяцца айпишники роутеров.
>
>прошу не ругать за корявость - он еще не закончен :)
>но ! почему-то не работает цикл while read LINE при команде rsh
>в нем.
>если вместо нее поставить эхо или отправку почты  - все отрабатывает
>энное количество раз, согласно количеству строк в файле spisok. ставил задержку
>после команды - все равно цикл заканчивается. если просто в ком.строке
>запустить команду - работает. кто что может подсказать ?

Зачем так сложно? Для сбора информации с девайсов давно придуман SNMP.


"проблемка со скриптом на shell"
Отправлено Валентин , 21-Июл-08 09:24 
>Зачем так сложно? Для сбора информации с девайсов давно придуман SNMP.

:)
- ребята, помогите, не ездит велосипед.
- зачем он тебе? возьми машину!


"проблемка со скриптом на shell"
Отправлено Валентин , 22-Июл-08 09:32 
спасибо за ответы, вы хотя бы старались :)
вот рабочий скрипт:

#!/bin/bash
path=`pwd`
spisok=$path/spisok
date=`date +%d.%m.%y`
if [ -d "$path/$date" ] ; then
:
else
    mkdir $path/$date
fi
cd ./$date
vars=`cat $spisok`
for LINE in $vars
    do rsh -l oper $LINE sh tech-support > $LINE
done
cd ..
tar -czPf cisco.$date.tar ./$date

с while не работает, почему - так и не понял...