显示系统模块参数名称和值

显示系统模块参数名称和值

我正在寻找一种快速检查参数的方法/sys/class/net/{NIC_Name}。我可以这样做cat *,它会给我值,但我想成对显示它们parameter_name:value。有没有内置的方法可以做到这一点?

答案1

一种方法是简单地循环遍历文件并打印每个文件的名称、冒号及其内容。

#!/bin/sh

cd /sys/class/net/"${1:?no interface name given}" || exit 1

for f in *; do
    if [ -f "$f" ]; then
        printf '%s:' "$f"
        cat -- "$f"
    fi
done

如果您命名该脚本nic-params,您可以将其标记为可执行文件chmod +x nic-params并将其运行为

./nic-params interface

在哪里interface是接口的名称(例如wlp2s0)。


第一个 ( $1) 之后的任何参数都将被忽略。如果您忘记传递参数,则会得到

./nic-params: 3: ./nic-params: 1: no interface name given

然后脚本就退出了。:?参数扩展的特殊形式实现了这一点。

如果你传递的参数没有指定网络接口,通常没有该名称的目录。然后你得到

./nic-params: 3: cd: can't cd to /sys/class/net/argument

并且脚本退出并报告失败,原因是|| exit 1

否则,您将获得属性(文件名)和值(内容)的列表。它看起来像这样,但包含更多行:

addr_assign_type:0
addr_len:6
address:00:0c:29:be:ad:53
broadcast:ff:ff:ff:ff:ff:ff
carrier:1
carrier_changes:2
carrier_down_count:1
carrier_up_count:1
dev_id:0x0

请注意,有些行:中除了作为文件名和内容之间的分隔符之外还会包含其他字符。如果您对此感到困惑,您可能需要使用:脚本之外的其他分隔符。

不会检查诸如queuespower和之类的子目录。statistics

有些行会包含错误消息。这是因为并非所有属性对于所有类型的接口都有意义。例如,duplex仅对以太网接口有意义;否则,您将得到:

duplex:cat: duplex: Invalid argument

如果您正在处理输出,并将标准输出和标准错误发送到多个位置,则在cat失败时可能需要将额外的换行符打印到标准输出(因为您获得的换行符实际上已发送到标准错误)。为此,请更改

        cat -- "$f"

到:

        cat -- "$f" || printf '\n'

但是,仅仅在终端中运行脚本并检查输出,我认为您会更喜欢如上所示的脚本。

相关内容