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: Paulo Bettega
Subject: Re: [shell-script] especie de "if-then-else" com sed
Date: Thu, 02 Oct 2014 15:08:04 -0300
User-agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31.1.2

Olá Marcelo, veja se o meu entendimento ajuda.
Com certeza exite um jeito mais fácil, mas esse foi
o que eu consegui montar testando com a saída do iwlist aqui.

ps- Comecei com o loop, por isso a variável "a" com nome sem significado:)
O script tem identação, mas pode perder na viagem.


Exemplo de saída
Cell01 Address - 00:1D:D5:D0:94:90
Cell01 Quality - Quality=15/100 Signal level=15/100
Cell01 Encryption_key - on
Cell01 ESSID - "ARRIS-9492"
Cell01 Mode - Master
Cell01 IE -
Cell02 Address - 00:21:04:1C:9E:95
Cell02 Quality - Quality=13/100 Signal level=13/100
Cell02 Encryption_key - on
Cell02 ESSID - "rede wireless"
Cell02 Mode - Master
Cell02 IE - IE: WPA Version 1 Group Cipher : TKIP Pairwise Ciphers (2) : TKIP 
CCMP

Abraços Paulo Bettega


#!/bin/bash

entrada=$(iwlist scan 2>&1)

for a in {01..99}; do

        amais1=$(printf '%02d' $(bc <<<"$a+1"))
        if grep -q "Cell $amais1" <<<"$entrada"; then
                end2='/Cell '$amais1'/'
        else
                end2='$'
        fi


        for campo_pesq in Address 'Quality=' 'Encryption key' ESSID Mode\
                          'IE: W'
        do
          case "$campo_pesq" in
                Quality=)campo=Quality
                        ;;
                'Encryption key')campo=Encryption_key
                        ;;
                'IE: W')campo=IE
                        ;;
                *)campo="$campo_pesq"
                        ;;
          esac

          eval "$(\
            echo Cell$a\_$campo=\'$(\
                cell=$(sed -n "/Cell $a/,$end2 { $end2 b; p;}" <<<"$entrada")
                if [ "$campo" = 'IE' ]; then
                  sed -n "/$campo_pesq/,$ p" <<<"$cell"
                else
                  grep "$campo_pesq" <<<"$cell" | cut -d: -f2-
                fi
                )\'
                )"
          eval echo Cell$a $campo -  \$Cell$a\_$campo
        done
        [ "$end2" = '$' ] && break
done





On 01-10-2014 15:18, Marcelo F Andrade address@hidden [shell-script] wrote:
Olá, gente.

O título comunica mas não explica.

Estou tentando fazer um script para identificar o tipo de autenticação
das redes wifi de onde estou a partir da saída do iwlist scan.

De forma resumida, há duas linhas nessa saída que me dizem isso:
- se houver uma linha "Encryption key:off", a rede está aberta;
- caso contrário, se houver também uma linha "WPA Version 1", a
autenticação é WPA;
- caso contrário, a autenticação é WEP.

O que fiz até o momento foi

iwlist wlan0 scan | \
grep -Eo '(ESSID:".+"|Quality=[0-9]{,2}/[0-9]{2}|Encryption
key:(on|off)|WPA Version (1|2))' | \
...

Passo essa saída ainda por um sed para, ao final, converter o
resultado de colunas para linhas com awk.

A questão é que como a linha "WPA Version" pode ou não existir, isso
está quebrando meu script.

Eis que pensei em fazer uma lógica e tentar colocar um placeholder
para identificar o tipo de autenticação. Mas aí já não consegui
resolver sozinho e vim recorrer a vós. :-)

Agradeço por qualquer ajuda.

Atenciosamente.

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



reply via email to

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