我只想检查 linux bash 命令输出中列出的服务器上的网络接口状态

I want to check only the network interfaces status on the server which is listed in the command output on linux bash

我只想根据 network-scripts 目录中配置的接口获取关闭的接口的输出。

for i in $(ls -1 /etc/sysconfig/network-scripts/ifcfg-e*|sed 's/.*ifcfg-//g'); do grep -i 'down' /sys/class/net/$i/operstate; echo $i;done

如何根据 for 迭代的输入仅列出关闭的接口?

谢谢

我建议使用 bash,它的 Parameter Expansion 和 CentOS 7 / RHEL 7:

for i in /etc/sysconfig/network-scripts/ifcfg-e*; do 
  i=$(basename "$i")
  grep -qi 'down' "/sys/class/net/${i#*-}/operstate" && echo "${i#*-}"
done

${i#*-} 从字符串 ifcfg-ens33 中删除 ifcfg- 以仅获取接口名称。

更新:

for i in /etc/sysconfig/network-scripts/ifcfg-e*; do
  grep -qi 'down' "/sys/class/net/${i##*-}/operstate" && echo "${i##*-}"
done

${i##*-} 从字符串 /etc/sysconfig/network-scripts/ifcfg-ens33 中删除 /etc/sysconfig/network-scripts/ifcfg- 以仅获取接口名称。

实际上这个可以完成工作:

for i in $(ls -1 /etc/sysconfig/network-scripts/ifcfg-e*|sed 's/.*ifcfg-//g'); do grep -i 'down' /sys/class/net/$i/operstate &> /dev/null;[ $? -eq "0" ] && echo $i;done|awk '{printf "%s ",$i} END {print ""}'