Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 14

Оптимизация скрипта, определяющего количество портов коммутатора

01.03.2013, 05:42. Показов 2718. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
На Shell скриптописанием начал заниматься совсем недавно. Прошу помощи в оптимизации кода и помощи в методе решения. Сделал скипт, который при работе проверяет модель коммутатора, ревизию и подсчитывает все отключеные порты на нем. Входные данные: ip коммутатора. Выходные данные: колличество отключеных портов. Реализовано с применением временных файлов, хотелось бы от этого уйти избавиться. Пытался реализовать через пайпы, но были проблемы со сравнением выходных данных дочернего процесса, а так же проблемы со сравнением строк. Через баш не реализовал, т.к. либо что-то не пойму, либо пользуюсь как-то не так терминалом
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#! /bin/sh
pkill snmp_dis.sh
count=1
dis=0
snmpget -O UTeQv -v2c -c private $1 .1.3.6.1.2.1.1.1.0 > file.~tmp
if grep -q "28" file.~tmp
then
    par=28
fi
snmpwalk -O UTeQv -v2c -c private $1 1.3.6.1.2.1.16.19.3.0 > file.~tmp
case  $par in #grep -q "3200-28" 
    28 )
        if grep -q "A1" file.~tmp
        then
            var=1
        else
            if grep -q "C1" file.~tmp
            then
                var=2
                echo Error2!
                exit
            else
                echo Error!
                exit
            fi
        fi
    ;;
    * )
        echo Error!
        exit
    ;;
esac
while [ $count -lt 29 ];
do
    snmpwalk -O UTeQv -v2c -c private $1 .1.3.6.1.4.1.171.11.113.1.3.2.2.1.1.4.$count.100 > opstcop.~tmp
    while read opstcop
    do
        #echo $opst
        snmpwalk -O UTeQv -v2c -c private $1 .1.3.6.1.4.1.171.11.113.1.3.2.2.2.1.3.$count.100 > admstcop.~tmp
        while read admstcop
        do
            #echo $admstcop
            if [ $count -gt 24 ]
            then
                snmpwalk -O UTeQv  -v2c -c private $1 .1.3.6.1.4.1.171.11.113.1.3.2.2.2.1.3.$count.101 > admst.~tmp
                while read admst
                do
                    admstfib=$admst
                    snmpwalk -O UTeQv -v2c -c private $1 .1.3.6.1.4.1.171.11.113.1.3.2.2.1.1.4.$count.101 > opst.~tmp
                    while read opst
                    do
                        opstfib=$opst
                        if [ $admstfib -eq 2 ]
                        then
                            fibstatus=disable
                            dis=$(($dis+1))
                        else
                            if [ $opstfib -eq 3 ]
                            then
                                fibstatus=down
                            else
                                fibstatus=enable
                            fi
                        fi
                        #echo Fibber Port $count is $fibstatus
                    done < opst.~tmp
                done < admst.~tmp
            fi
            if [ $admstcop -eq 2 ]
            then
                copstatus=disable
                dis=$(($dis+1))
            else
                if [ $opstcop -eq 3 ]
                then
                    copstatus=down
                else
                    copstatus=enable
                fi
            fi
            #echo $copstatus
            #if [ "$copstatus" = "disable" ]
            #then
            #dis=$(($dis+1))
            #fi
            #echo $dis ports is disable
            #echo Copper Port $count is $copstatus
        done < admstcop.~tmp
    done < opstcop.~tmp
    count=$((${count}+1))
done 
echo $dis
rm admstcop.~tmp
rm opstcop.~tmp
rm admst.~tmp
rm opst.~tmp
rm file.~tmp
По сути это скелет, который будет доработан для всех моделей и ревизий коммутаторов.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.03.2013, 05:42
Ответы с готовыми решениями:

Cisco настройка портов коммутатора
настройки которые ввожу не работают всяко разно уже пробовала. 1.настройте ipv4-адрес для vlan1 (для подсети 192.168.1.0) коммутатора и...

Затруднения с работоц портов коммутатора
Здравствуйте! Работаю в Cisco Packet Tracer (v7.0), необходимо скоммутировать 15ПК с коммутатором 2950/24. Все порты включены, пк тоже,...

Оптимизация скрипта
Доброго времени суток, уважаемые. Суть моего вопроса такова: возможно ли оптимизировать (ускорить) работу скрипта? Вопрос возник...

13
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.03.2013, 06:09
Цитата Сообщение от yarik_ya Посмотреть сообщение
Bash
1
file.~tmp
обычно временные имена задают в виде file.tmp~

Добавлено через 5 минут
Цитата Сообщение от yarik_ya Посмотреть сообщение
Bash
1
snmpget -O UTeQv -v2c -c private $1 .1.3.6.1.2.1.1.1.0 > file.~tmp
строка повторяется - значит, нужно сделать функцию
Bash
1
2
3
4
5
6
7
8
9
10
11
snmpget -O UTeQv -v2c -c private $1 .1.3.6.1.2.1.1.1.0 > file.~tmp
 
func()
{
    local ip num file
    
    ip="$1"
    num="$2"
    file="$3"
    snmpget -O UTeQv -v2c -c private "$ip" "$num" > "$file"
}
назвать её в соответствии с тем, что она делает (чтобы можно было использовать, совершенно не зная её внутреннего устройства)

Добавлено через 3 минуты
Цитата Сообщение от yarik_ya Посмотреть сообщение
Bash
1
grep -q "28" file.~tmp
то же самое - нужна функция

Добавлено через 7 минут
с 1 до 32 строки опиши словами, что делаешь
0
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 14
01.03.2013, 06:25  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
с 1 до 32 строки опиши словами, что делаешь
в файл выгружаю модель коммутатора, моделей будет несколько. В if рассматривать каждую модель и потом присваивать par будет неудобно.
Далее в файл выгружаю ревизию. Потом следует case по моделям коммутатора, который будет проверять ревизию и уже под каждый коммутатор и ревизию поставлять свой var. В var буду подставлять строку, которую буду использовать в snmp запросе, т.к. для каждой модели и ревизии свой snmp запрос. К примеру при запросе .1.3.6.1.4.1.171.11.113.1.3.2.2.1.1.4.24 .100 выведет либо 2, либо 3, что значит, что на медном порту коммутатора либо есть активное соединение, либо его нет.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.03.2013, 06:45
Цитата Сообщение от yarik_ya Посмотреть сообщение
в файл выгружаю модель коммутатора
вторая строка, к примеру, это что ?

Добавлено через 4 минуты
Цитата Сообщение от yarik_ya Посмотреть сообщение
Bash
1
2
3
4
5
6
7
8
9
#! /bin/sh
pkill snmp_dis.sh
count=1
dis=0
snmpget -O UTeQv -v2c -c private $1 .1.3.6.1.2.1.1.1.0 > file.~tmp
if grep -q "28" file.~tmp
then
    par=28
fi
вот в данном фрагменте:
1) что такое вторая строка ?
2) что такое count ?
3) что такое dis ?
4) что в результате находится в файле file.~tmp ?
5) что такое par ?

Добавлено через 1 минуту
Цитата Сообщение от yarik_ya Посмотреть сообщение
Далее в файл выгружаю ревизию.
приведи пример ревизии
0
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 14
01.03.2013, 07:00  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
вот в данном фрагменте:
1) что такое вторая строка ?
2) что такое count ?
3) что такое dis ?
4) что в результате находится в файле file.~tmp ?
5) что такое par ?
1) избавляюсь от процесса snmp_dis.sh, если он есть "snmp_dis.sh" - это название скрипта, код которого я привел в топике.
2) count от 1 до 28 увеличивается. Скрипт написан пока под 1 модель коммутатора, у которого 28 портов, count будет меняться в зависимости от модели коммутатора в операторе выбора.
3) dis - счетчик, подсчитывает число отключеных портов.
4) при первой записи хранится название модели коммутатора. после второй записи храним только ревизию коммутатора.
5) в par указано некоторое значение, которое будет меняться при разных моделях коммутатора. Например 28 коммутатор - значение 28. 26 поровый - значение 26. и т.п.
приведи пример ревизии
$ snmpwalk -O UTeQv -v2c -c private 192.168.10.11 1.3.6.1.2.1.16.19.3.0
"A1"
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.03.2013, 07:15
Цитата Сообщение от yarik_ya Посмотреть сообщение
1) избавляюсь от процесса snmp_dis.sh, если он есть "snmp_dis.sh"
это не нужно, скрипт не должен содержать действий, не относящихся к его задаче

Цитата Сообщение от yarik_ya Посмотреть сообщение
2) count от 1 до 28 увеличивается. Скрипт написан пока под 1 модель коммутатора, у которого 28 портов, count будет меняться в зависимости от модели коммутатора в операторе выбора.
count - это что, количество портов коммутатора ? значит, так и надо назвать переменную

Цитата Сообщение от yarik_ya Посмотреть сообщение
3) dis - счетчик, подсчитывает число отключеных портов.
тоже слово "порт" должно быть в переменной, переменные должны легко читаться, чтобы было понятно, для чего они

Цитата Сообщение от yarik_ya Посмотреть сообщение
4) при первой записи хранится название модели коммутатора. после второй записи храним только ревизию коммутатора.
то есть они не нужны, просто ты не знаешь, как сохранить текст вывода программы в переменную

Цитата Сообщение от yarik_ya Посмотреть сообщение
5) в par указано некоторое значение, которое будет меняться при разных моделях коммутатора. Например 28 коммутатор - значение 28.
вот именно, что это непонятно что; нужно определить что это и назвать понятно; если это номер коммутатора, то его так и надо назвать, а если это что-то другое, то нужно назвать соответственно

пример модели приведи ещё

Добавлено через 5 минут
Bash
1
2
3
4
5
6
7
8
9
10
# get_revision: получить ревизию (например "A1")
# get_revision(ip, num)
get_revision()
{
    local ip num
    
    ip="$1"
    num="$2"
    snmpwalk -O UTeQv -v2c -c private "$ip" "$num"
}
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# get_revision: получить ревизию (например "A1")
# get_revision(ip, num)
get_revision()
{
    local ip num
    
    ip="$1"
    num="$2"
    snmpwalk -O UTeQv -v2c -c private "$ip" "$num"
}
 
# пример использования функции
rev=$(get_revision "192.168.10.11" "1.3.6.1.2.1.16.19.3.0")
echo "$rev"
1
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 14
01.03.2013, 07:36  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
count - это что, количество портов коммутатора ? значит, так и надо назвать переменную
не совсем. count - это текущий порт. в данном примере он в цикле увеличивается от 1 до 28, т.к. заранее известно мне было, что их 28 всего. При разных версяих коммутатора буду уменьшать значение с Count до 0.
Bash
1
2
3
while [ $count -lt 29 ];
...
count=$((${count}+1))
- сейчас
Bash
1
2
3
while [ $count -ne 0 ];
...
count=$((${count}-1))
- будет
Цитата Сообщение от accept Посмотреть сообщение
тоже слово "порт" должно быть в переменной, переменные должны легко читаться, чтобы было понятно, для чего они
ну dis - типо disable

Цитата Сообщение от accept Посмотреть сообщение
то есть они не нужны, просто ты не знаешь, как сохранить текст вывода программы в переменную
сохранить то знаю как, я всячески кувыркался со сравнением строк и ниразу не получилось их по нормальному сравнить (либо false, либо ошибка). в итоге строки сравниваю в grep и при найденых вхождения true, иначе false.
Цитата Сообщение от accept Посмотреть сообщение
вот именно, что это непонятно что; нужно определить что это и назвать понятно; если это номер коммутатора, то его так и надо назвать, а если это что-то другое, то нужно назвать соответственно
ну var - нужен для передачи модели в case. можно обозвать как model. Я поэтому и попросил помощи в оптимизации. По хорошему этот var - костыль, прикрученый из-за проблем со сравнением строк.
Цитата Сообщение от accept Посмотреть сообщение
пример модели приведи ещё
$ snmpget -O UTeQv -v2c -c private 192.168.10.11 .1.3.6.1.2.1.1.1.0
"D-Link DES-3200-28 Fast Ethernet Switch"
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.03.2013, 08:48
Bash
1
2
3
4
5
6
7
8
9
10
11
# get_model: получить модель (например "28")
# get_model(ip, num)
get_model()
{
    local ip num
    
    ip="$1"
    num="$2"
    snmpget -O UTeQv -v2c -c private "$ip" "$num" | \
        sed 's/^D-Link DES-3200-\([0-9]*\) .*$/\1/'
}
Добавлено через 12 минут
Цитата Сообщение от yarik_ya Посмотреть сообщение
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
case  $par in #grep -q "3200-28" 
    28 )
        if grep -q "A1" file.~tmp
        then
            var=1
        else
            if grep -q "C1" file.~tmp
            then
                var=2
                echo Error2!
                exit
            else
                echo Error!
                exit
            fi
        fi
    ;;
    * )
        echo Error!
        exit
    ;;
esac
по этому фрагменту:
1) par - это модель ?
2) что такое var ?
3) что означают эти ошибки, в чём отличие Error от Error2 ?
4) зачем при exit что-то присваивается var ?
5) что происходит при выборе пункта 28 ?

Цитата Сообщение от yarik_ya Посмотреть сообщение
ну var - нужен для передачи модели в case. можно обозвать как model
видишь, я тебе говорю про par, а ты мне отвечаешь про var, это потому что из-за этих названий ты уже сам их не различаешь
1
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 14
01.03.2013, 10:05  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
по этому фрагменту:
1) par - это модель ?
2) что такое var ?
3) что означают эти ошибки, в чём отличие Error от Error2 ?
4) зачем при exit что-то присваивается var ?
5) что происходит при выборе пункта 28 ?


видишь, я тебе говорю про par, а ты мне отвечаешь про var, это потому что из-за этих названий ты уже сам их не различаешь
1) да
2) var - будет содержать часть oid под конкретную ммодель коммутатора.
3) заместо этого будет меняться значение var. Использовал для проверки работы скрипта с разными коммутаторами и ревизиями.
если не известная модель коммутатора или же версия ревизии, то выдает ошибку.
4) когда добавлю ревизию для коммутатора сообщение о ошибке и выход уберу, а вар останется, только присвою другое значение.
5) проверяем ревизию и меняем значения вар, которые зависят от ревизии. так же будут пункты, к примеру 26, 18,10.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.03.2013, 10:47
Цитата Сообщение от yarik_ya Посмотреть сообщение
если не известная модель коммутатора или же версия ревизии, то выдает ошибку
она должна разные ошибки выдавать, потому что у тебя "если неизвестная модель, то выдать ошибку типа 1" и "если модель 28, то выдать ошибку типа 1"

Цитата Сообщение от yarik_ya Посмотреть сообщение
2) var - будет содержать часть oid под конкретную ммодель коммутатора.
в первоначальном скрипте var содержит 1 или 2, 1 или 2 - это часть oid ?

Цитата Сообщение от yarik_ya Посмотреть сообщение
3) заместо этого будет меняться значение var. Использовал для проверки работы скрипта
а ты написал, что этот скрипт уже рабочий и его надо оптимизировать просто
а в нём какие-то проверки, которые вообще не нужны

Цитата Сообщение от yarik_ya Посмотреть сообщение
4) когда добавлю ревизию для коммутатора сообщение о ошибке и выход уберу, а вар останется, только присвою другое значение.
да ты уже забудешь сто раз, что ты там собирался добавлять

Цитата Сообщение от yarik_ya Посмотреть сообщение
5) проверяем ревизию и меняем значения вар
то есть ты по номеру ревизии хочешь получить номер oid (расшифруй oid)

Добавлено через 7 минут
твоя задача сейчас - это сформулировать алгоритм, который ты хочешь реализовать, а не вары какие-то перечислять, которые ничего не значат

например, из того, что уже рассмотрели:
1. узнать ip
2. получить двузначный номер модели для ip
3. получить двузначный номер ревизии для ip
4. по номеру модели для ip получить однозначный номер oid
0
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 14
01.03.2013, 11:14  [ТС]
скрипт рабочий для 1 модели коммутатора. При остальных моделях он выдает ошибку и завершает работу. Это предусмотрено как раз в скелете проверки модели и ревизии. В общем я переделаю через функции. И покажу что получится. часть oid не обязательно будет 1 символ. Когда соберу все oid, решу сколько символов буду использовать оттуда.
она должна разные ошибки выдавать, потому что у тебя "если неизвестная модель, то выдать ошибку типа 1" и "если модель 28, то выдать ошибку типа 1"
да этот Error - чисто для меня был. Это скелет программы. Я когда бы заполнял все oid'ами я бы откорректировал бы это и точно не забыл бы.
то есть ты по номеру ревизии хочешь получить номер oid (расшифруй oid)
так нельзя сделать. я хочу по модели и ревизии подставить нужный мне часть oid. Oid - это индетификатор объекта. К примеру порт коммутатора - это объект. А .1.3.6.1.4.1.171.11.113.1.3.2.2.1.1.4.25 .101 - oid состояния оптического 25 порта коммутатора модели 3200-28, ревизии А1, который характеризует активен ли порт или нет.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.03.2013, 11:19
Цитата Сообщение от yarik_ya Посмотреть сообщение
В общем я переделаю через функции. И покажу что получится.
сначала формулируй на понятиях, что нужно сделать,
а потом, когда завершённая часть сформулирована, реализуй её в виде кода

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

Добавлено через 56 секунд
Цитата Сообщение от yarik_ya Посмотреть сообщение
Oid - это индетификатор объекта.
object identificator
0
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 14
04.03.2013, 12:12  [ТС]
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#!/bin/sh
 
get_revision()
{
    local ip num
    ip="$1"
    num="$2"
    snmpwalk -O UTeQv -v2c -c private "$ip" "$num"
}
 
get_model()
{
    local ip num
    ip="$1"
    num="$2"
    model=$(snmpget -O UTeQv -v2c -c private "$ip" "$num")
#   echo $model | sed 's/^"D-Link DES-3200-\([0-9]*\) .*$/\1/'
    echo $model
}
 
determine_model()
{
    local model rev
    model="$1"
    rev="$2"
    case  $model in
        '"D-Link DES-3200-28 Fast Ethernet Switch"' ) 
            port_max=28
            case  $rev in
                '"A1"' )
                    key_adm=2
#                   key_opt=6
                ;;
                '"C1"' )
                    key_adm=1.1
#                   key_opt=5.1
                ;;          
                * )
                    echo No such this revision!
                    exit
                ;;
            esac
        ;;
        '"D-Link DES-3200-26 Fast Ethernet Switch"' ) 
            port_max=26
            case  $rev in
                '"A1"' )
                    key_adm=1
#                   key_opt=5
                ;;
                '"C1"' )
                    key_adm=2.1
#                   key_opt=6.1
                ;;          
                * )
                    echo No such this revision!
                    exit
                ;;
            esac
        ;;
        '"D-Link DES-3200-18 Fast Ethernet Switch"' ) 
            port_max=18
            case  $rev in
                '"A1"' )
                    key_adm=3
#                   key_opt=7
                ;;
                '"C1"' )
                    key_adm=3.1
#                   key_opt=7.1
                ;;          
                * )
                    echo No such this revision!
                    exit
                ;;
            esac
        ;;
        '"D-Link DES-3200-10 Fast Ethernet Switch"' ) 
            port_max=10
            case  $rev in
                '"A1"' )
                    key_adm=4
#                   key_opt=8
                ;;
                '"C1"' )
                    key_adm=4.1
#                   key_opt=8.1
                ;;          
                * )
                    echo No such this revision!
                    exit
                ;;
            esac
        ;;      
        * )
            echo No such this model!
            exit
        ;;
    esac
    echo $port_max $key_adm #$key_opt
}
 
walk()
{
    local ip key adm fib
    ip=$1
    key="$2"
    adm="$3"
    fib=$4
    snmpwalk -O UTeQv -v2c -c private $1 .1.3.6.1.4.1.171.11.113.1.3.2.2."$key"."$adm".$count.10$fib
}
 
model=$(get_model $1 ".1.3.6.1.2.1.1.1.0")
#echo "$model"
 
rev=$(get_revision $1 "1.3.6.1.2.1.16.19.3.0")
#echo "$rev"
 
d_model=$(determine_model "$model" "$rev")
#echo "$d_model"
true_switch=$(echo $d_model | grep "No such")
#echo $true_model
if [ -n "$true_switch" ]
then
    exit
fi
port_max=$(echo $d_model | sed 's/\([0-9]*\).*$/\1/')
#echo $port_max
#echo "$d_model"
key_adm=$(echo $d_model | sed 's/.\{2\} \([0-9]*\).*$/\1/')
#echo $key_adm
#key_opt=$(echo $d_model | sed 's/.\{5\}\([0-9]*\).*$/\1/')
#echo $key_opt
 
count=1
dis=0
if [ $port_max -eq 28 ]
then
    no_teg_port=24
else
    no_teg_port=$(($port_max-2))
fi
 
while [ $count -le $port_max ]
do
    adm_st=$(walk $1 "$key_adm" 1.3 0)
#   echo $adm_st
#   opt_st=$(walk $1 $key_opt 1.1.4 0)
    if [ $adm_st -eq 2 ]
    then
        status=disable
        dis=$(($dis+1))
#   else
#       if [ $op_st -eq 3 ]
#       then
#           status=down
#       else
#           status=enable
#       fi
    fi
#   echo Copper Port $count is $status
    if [ $count -gt $no_teg_port ]
    then
        adm_st=$(walk $1 "$key_adm" "1.3" 1)
#       opt_st=$(walk $1 $key_opt 1.1.4 1)      
        if [ $adm_st -eq 2 ]
        then
            status=disable
            dis=$(($dis+1))
#       else
#           if [ $op_st -eq 3 ]
#           then
#               status=down
#           else
#               status=enable
#           fi
        fi
#       echo Fibber Port $count is $status
    fi
    count=$((${count}+1))
done 
echo Disable is $dis ports
Как то так
Oid'ы пока не знаю увы, от того какие они будут, зависить будут и key, и adm. op_st пока исключен из программы, т.к. без oid тоже пока не знаю как будет он зависить от коммутатора. Опять же для 3200-28 ревизии А1 программа работает(знаю только его oid)
Так же все выключеные порты можно отслеживать и без op_st
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
04.03.2013, 20:54
Цитата Сообщение от yarik_ya Посмотреть сообщение
Bash
39
40
                    echo No such this revision!
                    exit
Bash
39
40
                    echo "error: No such revision" 1>&2
                    exit 1
Цитата Сообщение от yarik_ya Посмотреть сообщение
Bash
11
12
13
14
15
16
17
18
19
get_model()
{
    local ip num
    ip="$1"
    num="$2"
    model=$(snmpget -O UTeQv -v2c -c private "$ip" "$num")
#   echo $model | sed 's/^"D-Link DES-3200-\([0-9]*\) .*$/\1/'
    echo $model
}
и что это ?

где комментарии к функциям, которые там были ? ты думаешь, что ты будешь помнить через пару дней, как работает функция и как её запускать ? или ты собираешься каждый день по пятьсот функций перечитывать ? да у тебя времени не хватит

функция пишется один раз, потом ты пользуешься только её прототипом и комментарием к ней, она никогда не перечитывается

Цитата Сообщение от yarik_ya Посмотреть сообщение
Bash
100
echo $port_max $key_adm #$key_opt
все эти переменные должны быть перечислены в local наверху в функции, таким образом они инкапсулированы в ней (не участвуют ни в каких других частях программы)

Цитата Сообщение от yarik_ya Посмотреть сообщение
Bash
103
walk()
то же самое, где комментарий ? ты думаешь, ты её будешь перечитывать ? ты её не будешь перечитывать, у тебя время будет только на то, чтобы комментарий прочитать и начать ей пользоваться

почему у тебя в этой функции используется $1 в 110 строке ? ты его для чего присваивал $ip ?
если строка длинная, переноси её с помощью \


дальше всё, начиная со 112 строки, тоже должно быть в функции (естественно, нужно определить шаги алгоритма, каждый шаг становится вызовом функции)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.03.2013, 20:54
Помогаю со студенческими работами здесь

Оптимизация скрипта
Здравствуйте! В общем ситуация такая, есть скрипт который вынужден обращаться в бд за одно выполнение примерно пару тройку сотен раз,...

оптимизация скрипта
суть скрипта - перебирает предложения, из них вынимает слова и затем помещает в БД и если такое есть уже то записывает +1 к встречаемости,...

Оптимизация скрипта
Доброго времени суток, уважаемые. Всем известно, что grep'овать можно с файлом, содержащим pattern'ы grep -f pattern_file...

Оптимизация скрипта
Добрый день, имеется шаблон со скриптом, заполняющим документ. Все работает, но очень медленно. Я с vba знаком слабовато, поэтому писал как...

Оптимизация работы скрипта
Здравствуйте. У меня скрипт, который работает с WEB-службой. Но работает он уж очень медленно =/ Вот пример обращения к службе: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru