The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Поиск массива в массиве"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Поиск массива в массиве"  +/
Сообщение от ieasm email(ok) on 23-Сен-10, 16:12 
Значит суть такова. Я забираю по SNMP таблицу мак-адресов в массив с именем "a". Командой source я забираю содержимой конфиг файла, в котором имеются маки, записанные следущим обраом:
mac[0]="000c.ce5d.16b0"
mac[1]="000e.838e.c407"
mac[2]="000f.f79c.17c0"
mac[3]="0012.7f55.6e61"
mac[4]="0015.c681.6930"
mac[5]="0019.06ab.d12d"
mac[6]="001c.f685.0201"
mac[7]="001f.cad5.57c0"

далее я циклом ищу содержимое массива "mac" в массиве "a" :

counter=0;
## проверяем полученные маки с эталоном через массивы

for j in $(seq 0 $((${#a[@]} - 1)))
do
for i in $(seq 0 $((${#mac[@]} - 1)))
do
if [[ "${mac[$i]}" == "${a[$j]}" ]]
then
echo "${a$j]}"

fi
counter=$((counter+1));
done


done
В этом случае скрипт выводит список совпавших маков и все отлично(вот пример вывода:
000c.ce5d.16b0
000e.838e.c407
000f.f79c.17c0
0012.7f55.6e61
001c.f685.0201
001f.cad5.57c0), но блин, когда вместо == (равно) я пишу != (не равно), то я получаю вывод кошмарный, строчки поторяются по 12 раз и нужный информаци среди них нету, прошу помочь разобраться, сам никак не пойду где проблема ( Заранее всем огромное спасибо.

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Поиск массива в массиве"  +/
Сообщение от Xaionaro (ok) on 23-Сен-10, 17:45 
>[оверквотинг удален]
>вывода:
>000c.ce5d.16b0
>000e.838e.c407
>000f.f79c.17c0
>0012.7f55.6e61
>001c.f685.0201
>001f.cad5.57c0), но блин, когда вместо == (равно) я пишу != (не равно),
>то я получаю вывод кошмарный, строчки поторяются по 12 раз и
>нужный информаци среди них нету, прошу помочь разобраться, сам никак не
>пойду где проблема ( Заранее всем огромное спасибо.

Ну, во-первых, наверное, не по 12, а по 7-8.
Во-вторых, вам нужно оставить "==", где вы должны будете метить через какую-нибудь переменную (или массив, это уже у кого как мозг повёрнут) что для данного значения есть совпадение. И уже ВНЕ внутреннего цикла проверять значение этой переменной.

Вообще, для отладки bash-скриптов удобно использовать флаг "-x"

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

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




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

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