2011-04-18 51 views
1
#!/bin/sh 
BLOCKDB="/opt/ip.blocked" 
IPS=$(grep -Ev "^#" $BLOCKDB) 
for i in $IPS 
do 
    sudo iptables -A INPUT -s $i -j DROP 
    sudo iptables -A OUTPUT -d $i -j DROP 
done 

我需要一个额外的语句在循环内,检查IP地址是否在iptables列表中,如果它已经在里面,然后继续循环。如何跳过for循环中的某些元素?

的检查语句应该是这样的:

iptables -L INPUT -v -n | grep $i 

我怎样才能把这个在这里?

回答

3

那么,有什么问题?如何继续或休息?

iptables -L INPUT -v -n | grep $i && continnue 

例如。

+2

@Beck:另外,您可能希望使用'grep -q $ i'来抑制输出并检查是否存在该值。 – DarkDust 2011-04-18 08:06:48

+0

感谢队友。它的工作:) – Somebody 2011-04-18 08:12:00

+0

谢谢你黑暗;) – Somebody 2011-04-18 08:12:43

1

尝试以下操作:

for i in $IPS 
do 
    sudo iptables -L INPUT -v -n | grep $i 
    if [ $? -eq 0 ] 
    then 
     sudo iptables -A INPUT -s $i -j DROP 
     sudo iptables -A OUTPUT -d $i -j DROP 
    fi 
done