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

Исходное сообщение
"Поиск массива в массиве"

Отправлено ieasm , 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 раз и нужный информаци среди них нету, прошу помочь разобраться, сам никак не пойду где проблема ( Заранее всем огромное спасибо.


Содержание

Сообщения в этом обсуждении
"Поиск массива в массиве"
Отправлено Xaionaro , 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"