Mil*_*son 4 iptables command-line bash scripts debug
我有一个很大的 iptables 规则集,我用自己的 bash 脚本管理。脚本中的大多数命令都是简单的单语句 iptables 命令。我正在尝试通过在脚本执行时添加成功/失败输出来改进脚本。
我将脚本分成不同的部分。一个例子是 FORWARD 链部分,其中所有规则都应用于 FORWARD 链。在本节的开头,我输出脚本已开始应用 FORWARD 规则,最后,我想输出是否所有规则都成功应用,或者是否有任何规则不起作用。这是基本思想:
#Start FORWARD section
echo -ne "Applying FORWARD rules..."
#rule 1
/sbin/iptables -A FOWRARD...
#rule 2
/sbin/iptables -A FORWARD...
echo -ne "\t\t\t[OK]\n"
Run Code Online (Sandbox Code Playgroud)
我想要做的是捕获每个 iptables 命令可能导致的任何输出或错误,并将它们存储在数组或其他东西中。然后在块的末尾,使用 if 语句评估数组以查看是否有任何错误。如果没有,输出[OK]状态,如果有,输出[FAILED]状态并显示相关错误。
有没有一种方法可以对整个规则块执行此操作,而无需将每个 iptables 规则包装在 if [ $? != 0 ] 表达式?
Juk*_*nen 12
trap如果命令具有非零退出状态,您可以使用shell 内置命令调用处理程序函数。您可以将必要的信息(例如行号和退出状态)传递给您的错误处理函数。
例子:
#!/bin/bash
handle_error() {
echo "FAILED: line $1, exit code $2"
exit 1
}
trap 'handle_error $LINENO $?' ERR
# your commands here
# ...
echo "OK"
Run Code Online (Sandbox Code Playgroud)