linux - 在脚本中调用多个退出点

标签 linux bash shell unix scripting

#!/bin/sh
echo "Kaveen's TCP Redirect SCRIPT"
clear
read -p "Port:" port
echo ""
read -p "Customer IP:" cusip
echo ""
read -p "Your Filtered IP:" filip
echo ""
read -p "Your Secondary IP:" secip
echo "Generating TCP Redirect on port $port from your ip $filip to customer ip $cusip"
iptables -t nat -A PREROUTING -p tcp -d $filip --dport $port -j DNAT --to-destination $cusip
echo "TCP Redirect 1/2 OK"
iptables -A FORWARD -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
echo "TCP Redirect 2/2 OK"
iptables -t nat -A POSTROUTING -d $cusip -j SNAT --to-source $secip
echo "Better Traffic Movement rule 1/1 OK"
iptables -t nat -A POSTROUTING -j SNAT --to-source $filip
echo "Player Movement Rule 1/1 OK"
echo "Generating reset script...."
echo "#!/bin/sh" >> reset.sh
echo "iptables -F" >> reset.sh
echo "iptables -X" >> reset.sh
echo "iptables -t nat -F" >> reset.sh
echo "iptables -t nat -X" >> reset.sh
echo "iptables -t mangle -F" >> reset.sh
echo "iptables -t mangle -X" >> reset.sh
echo "iptables -P INPUT ACCEPT" >> reset.sh
echo "iptables -P FORWARD ACCEPT" >> reset.sh
echo "iptables -P OUTPUT ACCEPT" >> reset.sh
echo "iptables -F" >> reset.sh
echo "iptables -X" >> reset.sh
echo "iptables -t nat -F" >> reset.sh
echo "iptables -t nat -X" >> reset.sh
echo "iptables -t mangle -F" >> reset.sh
echo "iptables -t mangle -X" >> reset.sh
echo "iptables -P INPUT ACCEPT" >> reset.sh
echo "iptables -P FORWARD ACCEPT" >> reset.sh
echo "iptables -P OUTPUT ACCEPT" >> reset.sh
chmod +x reset.sh
echo "Reset script creation OK"
echo "Reset script can be used via ./reset.sh in directory:"
pwd
echo "TCP Redirect made from $fillip to $cusip on port $port"

我已经制作了一个 iptables TCP 重定向脚本,如上所述。 我想做到这一点,例如,如果 iptables 命令之一失败,就在那里停止脚本而不运行其下面的任何内容,我该怎么做?

最佳答案

最简单的事情可能是添加 errexit 选项。这在 shebang 中最容易实现:

echo "#!/bin/sh -e" >> reset.sh

但是您确实应该考虑在整个脚本中使用定界符:

cat << \EOF > reset.sh
#!/bin/sh -e
iptables -F
iptables -X
...
iptables -P OUTPUT ACCEPT
EOF

关于linux - 在脚本中调用多个退出点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31909497/

相关文章:

检查连接打开或关闭?(在 Linux 中的 C 中)

linux - 当可用内存较少时映射 BAR 中提到的内存

linux - 无滴答内核、isolcpus、nohz_full 和 rcu_nocbs

linux - Bash 自动退出/注销 SSH session

bash - 如何复制没有内容的文件和文件夹?

python - 如何从子进程设置父进程的shell env

linux - 在 chown 和 chmod 之后,用户在文件夹中的权限被拒绝

perl - 将 Unix `cal` 输出转换为 Latex 表代码 : one-liner solution?

java - 如何将日期从shell脚本传递到java即时数据类型

c - 同时 fork 和 exec 多个进程