当两项都存在时分别处理情况(grepping ifconfig 输出)

Separately handling case when both of two items are present (grepping ifconfig output)

我正在尝试通过 dwm window 管理器将脚本通过管道传输到 linux 中的状态栏,并使其工作正常,但如果我有多个命令,则希望有一个命令回显“多个”接口名称同时起来。到目前为止,这是我想出的,但是如果 wlan0 和 usb0 同时启动,它不想在 运行 脚本时回显“多个”?非常感谢任何帮助。

#!/bin/bash

a=$(ifconfig | grep -ow "wlan0")
b="wlan0"

c=$(ifconfig | grep -ow "usb0")
d="usb0"

e=$(ifconfig | grep -ow 'usb0\|wlan0')
f="usb0\nwlan0"


if   [[ "$a" == "$b" ]] ; then
        echo -e "${b}"

elif [[ "$c" == "$d" ]] ; then
        echo -e "${d}"

elif [[ "$e" == "$f" ]] ; then
        echo "multiple"

else
        echo "not connected"
fi

multiple 案例放在 首位 ,只有在未达到时才会落到其他案例中。

#!/usr/bin/env bash
isup() {
  [[ -e /sys/class/net//carrier ]] || return 1
  [[ $(</sys/class/net//carrier) = 1 ]] || return 1
  return 0
}

if isup usb0 && isup wlan0; then
  echo "multiple"
elif isup usb0; then
  echo "usb0"
elif isup wlan0; then
  echo "wlan0"
fi

这也不要求我们有 ifconfig(所有新的 Linux 发行版中都不存在 -- 现代替代品是 iproute2,提供 ip 命令),而且避免 运行 任何外部命令(更不用说 运行 两个单独的外部命令,每个命令三次)。

我想我可能已经弄清楚了,ifconfig 可以很好地用于我的情况。感谢查尔斯·达菲 (Charles Duffy) 的一些实用指点,您对以下脚本有何看法?

这将在我的状态栏上打印如下,

  1. 如果usb网络连接=usb0
  2. 如果wlan0连接=wlan0
  3. 如果usb和wlan0都连接=多个
  4. 如果没有网络=未连接
#!/usr/bin/env bash

a=$(ifconfig | grep -ow "wlan0\|usb0")
b=$'wlan0\nusb0'
c=$(printf "$b")

if      [[ "$a" = "wlan0" ]] ; then
        printf "wlan0"

elif    [[ "$a" = "usb0" ]] ; then
        printf "usb0"

elif    [[ "$a" =~ ["$c"] ]] ; then
        printf "multiple"

else
        printf "not connected"
fi