Linux 匹配bash case语句中的字符串并查找当前无线网络
我有一个bash脚本(供个人使用),其中一部分根据我连接到的网络打印消息。作为本文的一部分,我想查看当前连接的无线网络的ID 我所做的是从Linux 匹配bash case语句中的字符串并查找当前无线网络,linux,bash,wireless,iwconfig,Linux,Bash,Wireless,Iwconfig,我有一个bash脚本(供个人使用),其中一部分根据我连接到的网络打印消息。作为本文的一部分,我想查看当前连接的无线网络的ID 我所做的是从iwconfig的输出中解析无线名称,然后我想打印出名称,或者特定网络的特殊消息: SSID=`iwconfig wlan0|grep "ESSID:" | sed "s/.*ESSID:\"\(.*\)\"/\1/"` 2>/dev/null case "$SSID" in StaffOnly) echo "Staff only
iwconfig
的输出中解析无线名称,然后我想打印出名称,或者特定网络的特殊消息:
SSID=`iwconfig wlan0|grep "ESSID:" | sed "s/.*ESSID:\"\(.*\)\"/\1/"` 2>/dev/null
case "$SSID" in
StaffOnly)
echo "Staff only network at Work" ;;
*)
echo "You're on a wireless network called $SSID"
esac
第二部分(打印我连接到的任何网络的名称)起作用,但在StaffOnly网络上的特殊情况不匹配,并通过另一个网络
我想知道我在
案例
陈述中做错了什么。还有,如果有更好的方法来实现这一点。sed命令缺少尾部*
。应该是:
SSID=`iwconfig wlan0|grep "ESSID:" | sed "s/.*ESSID:\"\(.*\)\".*/\1/"` 2>/dev/null
^^ HERE!
否则,您将保留行的结尾,并且它显然包含一些空格,这会导致不匹配
若干相关说明:
- 重定向应位于后引号内:
SSID=`iwconfig wlan0|grep "ESSID:" | sed "s/.*ESSID:\"\(.*\)\".*/\1/" 2>/dev/null`
通常优于反向报价,因为它可以嵌套:$()
SSID=$(iwconfig wlan0|grep "ESSID:" | sed "s/.*ESSID:\"\(.*\)\".*/\1/" 2>/dev/null)
- 执行调试打印时,始终在变量内容周围添加一些分隔符,以便看到任何前导和尾随空格
*
。应该是:
SSID=`iwconfig wlan0|grep "ESSID:" | sed "s/.*ESSID:\"\(.*\)\".*/\1/"` 2>/dev/null
^^ HERE!
否则,您将保留行的结尾,并且它显然包含一些空格,这会导致不匹配
若干相关说明:
- 重定向应位于后引号内:
SSID=`iwconfig wlan0|grep "ESSID:" | sed "s/.*ESSID:\"\(.*\)\".*/\1/" 2>/dev/null`
通常优于反向报价,因为它可以嵌套:$()
SSID=$(iwconfig wlan0|grep "ESSID:" | sed "s/.*ESSID:\"\(.*\)\".*/\1/" 2>/dev/null)
- 执行调试打印时,始终在变量内容周围添加一些分隔符,以便看到任何前导和尾随空格
- 您不需要
sed
。所有这些都可以使用grep
完成,如下所示:
SSID=$(iwconfig wlan0 | grep -oP '(?<=ESSID:")[^"]*')
SSID=$(iwconfig-wlan0 | grep-oP'(?您不需要sed
。所有这些都可以使用grep
完成,如下所示:
SSID=$(iwconfig wlan0 | grep -oP '(?<=ESSID:")[^"]*')
SSID=$(iwconfig wlan0 | grep-oP'(?大小写看起来不错。检查$SSID
是否包含任何前导/尾随空格,大小写是否匹配。啊哈!谢谢。它的结尾确实有一个空格。但我无法确定它来自何处。可能与我使用的sed
有关。我通过添加tr-d>来修复它
到该管道,但它似乎有点粗糙。sed
命令的引号后面也应该有*
。例如“s/*ESSID:\”\(.*)“*/\1/”
。如果不这样做,引号后面的文本(碰巧包含一些空格)将保留在那里。大小写看起来很好。请检查$SSID
是否不包含任何前导/尾随空格,并且大小写匹配。啊哈!谢谢。它的结尾确实有空格。但我无法确定它来自何处。可能是这样做的我使用了sed
。我通过在管道中添加tr-d”“
来修复它,但它似乎有点粗糙。sed
命令的引号后面也应该有*
。比如“s/*ESSID:\”\(.\)*/\1/”
。如果不这样做,引号后面的文本(碰巧包含一些空格)将保留在那里。非常感谢您的帮助。非常感谢您提供的额外信息:)非常感谢您的帮助。非常感谢您提供的额外信息:)啊,谢谢。我知道有一种方法可以和格雷普一起做,但是,说实话,进入“向后看”,这真的伤害了我的大脑!我必须再看一看……啊,谢谢。我知道有一种方法可以和格雷普一起做,但是,说实话,进入“向后看”,这真的伤害了我的大脑!我必须再看一看。。。