当两项都存在时分别处理情况(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) 的一些实用指点,您对以下脚本有何看法?
这将在我的状态栏上打印如下,
- 如果usb网络连接=usb0
- 如果wlan0连接=wlan0
- 如果usb和wlan0都连接=多个
- 如果没有网络=未连接
#!/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
我正在尝试通过 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) 的一些实用指点,您对以下脚本有何看法?
这将在我的状态栏上打印如下,
- 如果usb网络连接=usb0
- 如果wlan0连接=wlan0
- 如果usb和wlan0都连接=多个
- 如果没有网络=未连接
#!/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