ブリッジのインターフェイス数を計算する方法

ブリッジのインターフェイス数を計算する方法

最後のポートが削除されたときにのみブリッジを終了したいので、やや人工的な検査方法を使用してこれを行います。

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"

(sには同等のパスがないため、ポートにはフルパスが含まれていますbash。)zsh:t

存在しないブリッジの場合、両方とも0を返します。

おすすめ記事