В настоящее время у меня есть скрипт, который добавляет правила к таблице брандмауэра на основе критерия выбора между двумя файлами.
ФАЙЛ 1 keys.txt
<string>
<string>
..
..
ФАЙЛ 2 hellos.txt
<string> <ipaddress> <ipaddress>
<string> <ipaddress> <ipaddress>
..
..
Мой скрипт сопоставляет строку из файла 2 со строкой из файла 1. Если совпадение существует, то оно добавляет правило брандмауэра для ipaddress после совпадения строки.
Сценарий выглядит следующим образом -
#!/bin/bash
while true
do
#Match a string from both the files and print the ipaddress to a file
word=$(awk 'FNR==NR{a[$1];next}($1 in a){print}' keys.txt hellos.txt | awk -v OFS=' ' '{ print $2, $3 }') >address.txt
#Remove duplicates for the ipaddress file
awk '!a[$0]++' address.txt > address_improved.txt
#Add firewall rule from new file.
filename=address_improved.txt
while read -r a b
do
"/sbin/iptables" -I FORWARD 1 -m physdev --physdev-is-bridged --physdev-in enxa0cec80f92bd --physdev-out eno1 -s $a -d $b -j ACCEPT
done < "$filename"
sleep 0.01
#Run while loop again because the files are changing constantly
done
Как я могу улучшить этот скрипт так, чтобы я не добавлял повторяющиеся правила брандмауэра каждый раз, когда выполняется цикл while. Я попытался добавить опцию -C (проверить), но она не работает для меня. Я просто получаю плохое правило вывода.