我只想在最后一个端口被删除时才关闭网桥,所以我有这个有点做作的检查来做到这一点
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
}
答案1
你可以做到:
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"
(请注意, ports 包含完整路径,因为sbash
没有等效路径)。zsh
:t
对于不存在的桥,两者都会返回 0。