Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 匹配bash case语句中的字符串并查找当前无线网络_Linux_Bash_Wireless_Iwconfig - Fatal编程技术网

Linux 匹配bash case语句中的字符串并查找当前无线网络

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

我有一个bash脚本(供个人使用),其中一部分根据我连接到的网络打印消息。作为本文的一部分,我想查看当前连接的无线网络的ID

我所做的是从
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)
    
  • 执行调试打印时,始终在变量内容周围添加一些分隔符,以便看到任何前导和尾随空格


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)
    
  • 执行调试打印时,始终在变量内容周围添加一些分隔符,以便看到任何前导和尾随空格


    • 您不需要
      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/”
      。如果不这样做,引号后面的文本(碰巧包含一些空格)将保留在那里。非常感谢您的帮助。非常感谢您提供的额外信息:)非常感谢您的帮助。非常感谢您提供的额外信息:)啊,谢谢。我知道有一种方法可以和格雷普一起做,但是,说实话,进入“向后看”,这真的伤害了我的大脑!我必须再看一看……啊,谢谢。我知道有一种方法可以和格雷普一起做,但是,说实话,进入“向后看”,这真的伤害了我的大脑!我必须再看一看。。。