予期しないタグ「iptables」の近くに構文エラーがあります。

予期しないタグ「iptables」の近くに構文エラーがあります。

私のスクリプトでこのエラーが発生しますiptable

./iptables-firewall.sh line 4: syntax error near unexpected token 'iptables'

./iptables-firewall.sh line 4: iptables -A OUTPUT -p udp -s $SERVER_IP --sport 1024:65535 -d $ip --dport 53 -m state -- state NEW, ESTABLISHED -j ACCEPT

このコードでは:

SERVER_IP="ppp"
DNS_SERVER="8.8.8.8"
for ip in $DNS_SERVER do
iptables -A OUTPUT -p udp -s $SERVER_IP --sport 1024:65535 -d $ip --dport 53 -m state -- state NEW, ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -s $ip --sport 53 -d $SERVER_IP --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
done

答え1

doinforループは独自の行になければなりません。

シェルは、それがキーワードかdoというパラメータであるかを推測することはできません。

書く

SERVER_IP="ppp"
DNS_SERVER="8.8.8.8"
for ip in $DNS_SERVER 
do
iptables -A OUTPUT -p udp -s $SERVER_IP --sport 1024:65535 -d $ip --dport 53 -m state -- state NEW, ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -s $ip --sport 53 -d $SERVER_IP --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
done

もう一つの方法は、セミコロンでステートメントを終了することです。

for id in $DNS_SERVER ; do
...

答え2

$DNS_SERVER前後にセミコロンを追加してくださいdo

関連情報