bash – 检查iptables用户链是否存在的最佳方法.

我试图以编程方式创建用户链并在iptables中删除它们.我想知道检查用户链是否存在以及是否创建用户链的最佳方法是什么.
使用iptables(8)列出链,将stdout / stderr重定向到/ dev / null,并检查退出代码.如果链存在,iptables将退出true.

这个shell函数来自我的iptables前端脚本:

chain_exists()
{
    [ $# -lt 1 -o $# -gt 2 ] && { 
        echo "Usage: chain_exists <chain_name> [table]" >&2
        return 1
    }
    local chain_name="$1" ; shift
    [ $# -eq 1 ] && local table="--table $1"
    iptables $table -n --list "$chain_name" >/dev/null 2>&1
}

请注意,我使用-n选项,以便iptables不会尝试将IP地址解析为主机名.没有这个,你会发现这个功能会很慢.

然后,您可以使用此函数有条件地创建链:

chain_exists foo || create_chain foo ...

其中create_chain是另一个创建链的函数.您可以直接调用iptables,但上面的命名使得它显而易见.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...