shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] especie de "if-then-else" com sed


From: Marcelo F Andrade
Subject: Re: [shell-script] especie de "if-then-else" com sed
Date: Thu, 2 Oct 2014 10:17:23 -0300

2014-10-01 17:14 GMT-03:00 Ronaldo Ferreira de Lima
address@hidden [shell-script] <address@hidden>:
> [...]
> Achei a explicação um pouco confusa e incompleta, não há exemplos de
> input e de output.

Okay.  Desculpe-me por isso.  Tentei explicar de forma simples
para não enviar um email longo e confuso.  Serei mais didático
e menos sintético desta vez.  Vamos lá.

A quem não conhece, quero tratar uma saída do iwlist como esta
(mostrei apenas com as linhas relevantes):

[code]
# iwlist wlan0 scan
   Cell 01 ...
                  Quality=48/70   Signal level=-64 dBm
                  Encryption key:off
                  ESSID:"WifiAberta"
                  ...
   Cell 02 ...
                  Quality=20/70   Signal level=-90 dBm
                  Encryption key:on
                  ESSID:"WifiWEP"
                  ...
   Cell 03 ...
                  Quality=32/70   Signal level=-84 dBm
                  Encryption key:on
                  ESSID:"WifiWPA"
                  ...
                  IE: WPA Version 1
                  ...
[/code]

Minha intenção é associar ao evento da tecla do wifi do meu
notebook com acpi um script que liste quais as redes sem-fio
estão disponíveis.  Por exemplo, mostrando o essid, a qualidade
e o tipo de autenticação, se há.

Para isso comecei a fazer o seguinte (parece medonho, eu sei,
mas com um pouco de atenção dá pra entender):
[code]
# iwlist wlan0 scan | grep -Eo
'(ESSID:".+"|Quality=[0-9]{,2}/[0-9]{2}|Encryption key:(on|off)|WPA
Version (1|2))' \
   | sed -nr 's/^ESSID:"(.+)"$/\1/p;
s/^Quality=([0-9]{1,2}\/70)$/\1/p;s/^Encryption key:off$/open/p;
s/^WPA Version (1|2)/wpa\1/p' \
   > output
48/70
open
WifiAberta
20/70
WifiWEP
32/70
wpa1
WifiWPA
[/code]

É por aí!  Mas esse resultado seria mais legível num fomato
tabular.  No entanto, para casar legal, deveria ter 3 informações
para cada rede wifi (da célula do meio só listou-se a qualidade
e o essid).  Gostaria de colocar nela um placeholder para indicar
que a  autenticação é WEP, para poder exibí-las em formato
tabular, assim:

[code]
# vi output   #incluí manualmente uma linha "wep" abaixo do 20/70
# cat output | awk '{ ORS=(NR%3?FS:RS) }1'
48/70 open WifiAberta
20/70 wep WifiWEP
32/70 wpa1 WifiWPA
[/code]

Se eu aplicar esse awk com a saída original, como a célula 2
só tem duas informações e estou agrupando os campos de
três em três, todo o restante da saída fica desalinhado.

A questão era como colocar um placeholder wep no script na
situação acima (o "else" do não-casamento do padrão).

BTW, se estiver num local onde só apareçam redes abertas
ou com autenticação WPA, o script já funciona muito bem.  :-)

Explicou ou complicou?

Atenciosamente.

-- 
MARCELO F ANDRADE | Belem, Amazonia, Brazil | http://about.me/mfandrade


reply via email to

[Prev in Thread] Current Thread [Next in Thread]