|
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
[Prev in Thread] | Current Thread | [Next in Thread] |