linux – 如何计算网桥中的接口数量

我想只在最后一个端口被移除时才将桥接器关闭,所以我有一点点检查这样做

brctl show看起来很难解析,以获取信息,并没有比我下面的更好.有更清洁的方法吗?

 brctl_count_if()
 {
        local BRIDGE=$1

        if [ ! -d /sys/devices/virtual/net/$BRIDGE ]; then
            echo 0
            return
        fi

        /bin/ls -1 /sys/devices/virtual/net/$BRIDGE/brif 2>/dev/null | wc -l
 }

解决方法:

你可以做到:

has_ports() {
  ls -A "/sys/devices/virtual/net/$1/brif/" 2> /dev/null | grep -q .
}

has_ports br0 || brctl delbr br0

要么:

if ! has_ports br0; then
  brctl delbr br0
fi

(请注意,您需要-A作为接口名称才能开始.).

要计算端口数量:

使用zsh:

ports=(/sys/devices/virtual/net/$bridge/brif/*(DN:t))
printf '%s\n' "$#ports ports in $bridge"

(:t)只有文件名而不是完整路径.

用bash:

shopt -s nullglob dotglob
ports=("/sys/devices/virtual/net/$brige/brif/"*)
printf '%s\n' "${#ports[@]} ports in $bridge"

(注意端口包含完整路径,因为bash没有zsh的等价物:t).

对于不存在的桥,两者都将返回0.

上一篇:数据库获取map数据后转化成json格式的数据


下一篇:docker学习-bridge网络