bash嵌套for循环不起作用

时间:2014-11-08 15:09:28

标签: bash

我已经编写了一个bash脚本来禁止路由器中的国家/地区IP块。

为什么以下情况有效:

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

2 个答案:

答案 0 :(得分:3)

看到它区分大小写。

for country in CN AD;

看到你在这里使用大写字母。如果你使用

for country in cn ad;

然后它应该工作。亲自尝试链接not working upper case zoneworking with lower case zone

答案 1 :(得分: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