我正在寻找一种快速检查参数的方法/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
请注意,有些行:
中除了作为文件名和内容之间的分隔符之外还会包含其他字符。如果您对此感到困惑,您可能需要使用:
脚本之外的其他分隔符。
不会检查诸如queues
、power
和之类的子目录。statistics
有些行会包含错误消息。这是因为并非所有属性对于所有类型的接口都有意义。例如,duplex
仅对以太网接口有意义;否则,您将得到:
duplex:cat: duplex: Invalid argument
如果您正在处理输出,并将标准输出和标准错误发送到多个位置,则在cat
失败时可能需要将额外的换行符打印到标准输出(因为您获得的换行符实际上已发送到标准错误)。为此,请更改
cat -- "$f"
到:
cat -- "$f" || printf '\n'
但是,仅仅在终端中运行脚本并检查输出,我认为您会更喜欢如上所示的脚本。