我尝试使用bash脚本检查是否有任何无线接口是UP。我想通过检查每个接口的/ proc / net / wireless中的Status字段可以做到这一点。但是,我试图寻找对该字段中可能值的引用及其含义,似乎没有任何结果。有人知道吗?这是解决这个问题的理想方式吗?
答案 0 :(得分:1)
您需要检查每个界面的operstate
以确定它是否是;上,下或未知。这是使用GNU awk
的一种方式:
awk '{ split(FILENAME, array, "/"); print array[5] ": " $1 }' $(find /sys/class/net/*/operstate ! -type d)
在我的系统上,这里有一些结果:
eth0: up
lo: unknown
vboxnet0: down
wlan0: up
要仅检查无线接口,您需要在每个接口下检查名为“wireless”的文件夹。这是使用GNU awk
的一种方式。
awk -F "/" 'FNR==NR { wire[$5]++; next } { split(FILENAME, state, "/"); if (state[5] in wire && $1 == "up") print state[5] }' <(find /sys/class/net/*/wireless -type d) $(find /sys/class/net/*/operstate ! -type d)
结果:
wlan0
的伪代码:
1. Get the directory names of the wireless devices as the 1st argument
2. Split these names on the "/" delimiter
3. Add the 5th column (the name of the wireless device) to an array called 'wire'
4. Now read in the operstates of all network interfaces as the 2nd argument
5. Split the interface filenames on the "/" delimiter to an array called 'state'
6. If the interface is a wireless interface (i.e. if it's in the array called
wire) and its operstate is "up", print it.