2011-04-18 120 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