2014-11-08 2 views
0

Я написал сценарий bash для запрета IP-блоков страны с моего маршрутизатора.bash inested for loop не работает

Почему следующие работы:

for ip in $(wget -qO- http://ipdeny.com/ipblocks/data/countries/cn.zone) 
do 
    iptables -I wanin -s "$ip" -j DROP 
done 

Но следующее, в котором я гнездятся несколько стран не?

for country in CN AD 
do 
    for ip in $(wget -qO- http://ipdeny.com/ipblocks/data/countries/$country.zone) 
    do 
     iptables -I wanin -s "$ip" -j DROP 
    done 
done 

ответ

3

Посмотрите, что это случай чувствительный. У вас есть

for country in CN AD; 

Посмотрите, что вы используете здесь шапки. Если вы используете

for country in cn ad; 

Тогда это должно сработать. Попробуйте себя ссылку not working upper case zone и working with lower case zone

1

С country, как ожидается, будет в нижнем регистре, вы можете добавить declare -l country так:

declare -l country 
for country in CN AD; do 
    for ip in $(wget -qO- http://ipdeny.com/ipblocks/data/countries/$country.zone); do 
    iptables -I wanin -s "$ip" -j DROP 
    done 
done 

или использовать ${var,,} parameter expansion:

for country in CN AD; do 
    for ip in $(wget -qO- http://ipdeny.com/ipblocks/data/countries/${country,,}.zone); do 
    iptables -I wanin -s "$ip" -j DROP 
    done 
done