2014-12-19 70 views
0

我在这里有一个小bash脚本我试图解决,但我不断收到一个语法错误,指出“意外的文件结束”。它询问我是否想阻止或取消阻止,并询问哪种类型的端口然后出错。语法错误:意外的文件结尾

任何帮助将不胜感激。

#!/bin/bash 

PTYPET="What kind of port? [udp] or [tcp] or [both] :" 
PTEXTT="What port? [number] :" 

echo "Would you like to block or unblock? [b] or [u] :" 
read choice 

if [ $(choice) == "u" ]; then 
    echo $PTYPET 
    read port-type 
    echo $PTEXTT 
    read port 
    if [ $(ptype-text) == "both" ]; then 
     /sbin/iptables -A INPUT -p $port-type -m tcp --dport $port -j ACCEPT 
     /sbin/iptables -A INPUT -p $port-type -m udp --dport $port -j ACCEPT 
    else 
    /sbin/iptables -A INPUT -p $port-type -m $port-type --dport $port -j ACCEPT 
fi 

else 
    echo $PTYPET 
    read port-type 
    echo $PTEXTT 
    read port 
    if [ $(ptype-text) == "both" ]; then 
     /sbin/iptables -A INPUT -p $port-type -m tcp --dport $port -j DROP 
     /sbin/iptables -A INPUT -p $port-type -m udp --dport $port -j DROP 
    else 
    /sbin/iptables -A INPUT -p $port-type -m $port-type --dport $port -j DROP 
fi 
+3

使用http://www.shellcheck.net/ – Cyrus 2014-12-19 06:03:37

回答

1

以一种不同的方式去了。

#!/bin/bash 

echo "Would you like to block or unblock? [ACCEPT] or [DROP] :" 
    read choice 
echo "What kind of port? [udp] or [tcp] or [both] :" 
    read porttype 
echo "What port? [number] :" 
    read port 

    if [[ $porttype == "both" ]]; then 
     /sbin/iptables -A INPUT -p tcp -m tcp --dport $port -j $choice 
     /sbin/iptables -A INPUT -p udp -m udp --dport $port -j $choice 
    else 
    /sbin/iptables -A INPUT -p $porttype -m $porttype --dport $port -j $choice 
fi 
1

如果你在你的缩进系统,你会发现这个问题:

if [ $(choice) == "u" ]; then 
    echo $PTYPET 
    read port-type 
    echo $PTEXTT 
    read port 
    if [ $(ptype-text) == "both" ]; then 
     /sbin/iptables -A INPUT -p $port-type -m tcp --dport $port -j ACCEPT 
     /sbin/iptables -A INPUT -p $port-type -m udp --dport $port -j ACCEPT 
    else # Indent next two lines 
     /sbin/iptables -A INPUT -p $port-type -m $port-type --dport $port -j ACCEPT 
    fi 
else 
    echo $PTYPET 
    read port-type 
    echo $PTEXTT 
    read port 
    if [ $(ptype-text) == "both" ]; then 
     /sbin/iptables -A INPUT -p $port-type -m tcp --dport $port -j DROP 
     /sbin/iptables -A INPUT -p $port-type -m udp --dport $port -j DROP 
    else # Indent the next two lines 
     /sbin/iptables -A INPUT -p $port-type -m $port-type --dport $port -j DROP 
    fi 
# And now it is clear that this fi was missing! 
fi 

经典,port-type是不是一个有效的变量名;下划线是可以的。使用$(ptype-text)正在运行命令ptype-text并捕获输出,这有点令人惊讶;与$(choice)类似。对于变量引用,请使用大括号:${choice}。代码中有一些相当明显的重复。这两对'echo/read'应该在if/else结构之外。

相关问题