Pegar parâmetro de comando via arquivo shell

1. Pegar parâmetro de comando via arquivo shell

Fabrício Lisbôa Franco
fabregas

(usa Outra)

Enviado em 09/01/2015 - 14:04h

Preciso fazer um script onde é enviado um comando no terminal e que depois trate o retorno, parâmetro por parâmetro. A primeira parte eu consegui fazer, o comando roda, mas a intenção é que o comando rode e depois de encerrado jogue o resultado pra uma variável para fazer comparações. Por exemplo:

# cat /proc/cpuinfo

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 37
model name : Intel(R) Core(TM) i5 CPU M 460 @ 2.53GHz
stepping : 5
microcode : 0x2
cpu MHz : 1197.000
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fdiv_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 11
...

Minha intenção é de pegar qualquer parâmetro e jogar pra uma variável pra fazer comparações. Ex: $var = $1 [parametro], só não sei como faz pra pegar parâmetro por parâmetro.






  


2. Re: Pegar parâmetro de comando via arquivo shell

Zhu Sha Zang
zhushazang

(usa Gentoo)

Enviado em 09/01/2015 - 14:27h


Você precisa ler as linhas (talvez usando readline) e jogar para um vetor. Eu faria isso em python, mas pode estar aprendendo aqui com bash:

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html

Att


3. Re: Pegar parâmetro de comando via arquivo shell

Perfil removido
removido

(usa Nenhuma)

Enviado em 09/01/2015 - 14:33h

Te dou uma dica em bash;

((i = 0)); while read line; do echo [$((++i))]: $line; done </proc/cpuinfo


Para capturar os valores use (g)awk/cut/sed, e para armazenar use vetor;
- -
.'.


4. Re: Pegar parâmetro de comando via arquivo shell

Ton Melo
IZhaq_melo

(usa FreeBSD)

Enviado em 09/01/2015 - 14:51h

fabregas escreveu:

Preciso fazer um script onde é enviado um comando no terminal e que depois trate o retorno,

parâmetro por parâmetro.

A primeira parte eu consegui fazer, o comando roda, mas a intenção é que o comando

rode e depois de encerrado

jogue o resultado pra uma variável para fazer comparações. Por exemplo:

# cat /proc/cpuinfo

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 37
model name : Intel(R) Core(TM) i5 CPU M 460 @ 2.53GHz
stepping : 5
microcode : 0x2
cpu MHz : 1197.000
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fdiv_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 11
...

Minha intenção é de pegar qualquer parâmetro e jogar pra uma variável pra fazer comparações. Ex: $var = $1 [parametro], só não sei como faz pra pegar parâmetro por parâmetro.


eu entendi a primeira parte mas depois voce quer executar o que?

# cat /proc/cpuinfo

se voce inscriver depois o && conectivo E ele encadeia o comando com outro sem usar o parâmetro.

cat /proc/cpuinfo && exit

agora se voce quer usar algo o ideal seria.


#cat /proc/cpuinfo | grep -i "model name" >> set vargb && export $vargb




5. Re: Pegar parâmetro de comando via arquivo shell

Perfil removido
removido

(usa Nenhuma)

Enviado em 09/01/2015 - 15:05h

Verifique se é mais ou menos isto o que procura:


while IFS=':' read key value; do
echo "key = '$key'; value = '$value'"
done < <(sed 's/\s\+:\s\+/:/' /proc/cpuinfo)


A saída que você mostrou é de apenas um processador. Para o que pretende fazer múltiplos processadores/cores seria um problema?



6. resposta

Fabrício Lisbôa Franco
fabregas

(usa Outra)

Enviado em 09/01/2015 - 16:43h

Então fiz desse jeito seu mas me parece estar com erro de sintaxe. Tirei os ";" e identei tudo. Mesmo assim ele não ta jogando pra variável. Ta dando esse erro aqui o:
busca_senha2.sh: 10: busca_senha2.sh: Syntax error: word unexpected. Outra coisa como que usa esse awk/cut/sed que você citou?


#!/bin/bash
echo "Inicializando placa de rede no modo promiscuo..."
airmon-ng start wlan0
echo "Verificando roteadores disponíveis..."

i=0
while read line
do
echo [$((++i))]: $line
done < airodump-ng mon0



ru4n escreveu:

Te dou uma dica em bash;

((i = 0)); while read line; do echo [$((++i))]: $line; done </proc/cpuinfo


Para capturar os valores use (g)awk/cut/sed, e para armazenar use vetor;
- -
.'.







7. explicação

Fabrício Lisbôa Franco
fabregas

(usa Outra)

Enviado em 09/01/2015 - 16:50h

Não entendi esse código seu. Nunca trabalhei com o sed, mas eu quero pegar, ou seja, listar todos os parâmetros do retorno do comando, pra depois identificar e trabalhar com ele.

textmode escreveu:

Verifique se é mais ou menos isto o que procura:


while IFS=':' read key value; do
echo "key = '$key'; value = '$value'"
done < <(sed 's/\s\+:\s\+/:/' /proc/cpuinfo)


A saída que você mostrou é de apenas um processador. Para o que pretende fazer múltiplos processadores/cores seria um problema?







8. Re: Pegar parâmetro de comando via arquivo shell

Perfil removido
removido

(usa Nenhuma)

Enviado em 09/01/2015 - 21:37h

fabregas escreveu:

Não entendi esse código seu. Nunca trabalhei com o sed, mas eu quero pegar, ou seja, listar todos os parâmetros do retorno do comando, pra depois identificar e trabalhar com ele.



Aplicando o meu código ao exemplo que você mandou, a saída seria:


key = 'processor'; value = '0'
key = 'vendor_id'; value = 'GenuineIntel'
key = 'cpu family'; value = '6'
key = 'model'; value = '37'
key = 'model name'; value = 'Intel(R) Core(TM) i5 CPU M 460 @ 2.53GHz'
key = 'stepping'; value = '5'
key = 'microcode'; value = '0x2'
key = 'cpu MHz'; value = '1197.000'
key = 'cache size'; value = '3072 KB'
key = 'physical id'; value = '0'
key = 'siblings'; value = '4'
key = 'core id'; value = '0'
key = 'cpu cores'; value = '2'
key = 'apicid'; value = '0'
key = 'initial apicid'; value = '0'
key = 'fdiv_bug'; value = 'no'
key = 'f00f_bug'; value = 'no'
key = 'coma_bug'; value = 'no'
key = 'fpu'; value = 'yes'
key = 'fpu_exception'; value = 'yes'
key = 'cpuid level'; value = '11'


Ou seja, o nome do parâmetro fica dentro da variável "$key" e o valor do parâmetro fica dentro da variável "$value". Basta testar as duas para saber qual parâmetro é e qual valor possui.




9. Real intenção

Fabrício Lisbôa Franco
fabregas

(usa Outra)

Enviado em 12/01/2015 - 17:15h

Minha real intenção é de pegar dados dos roteadores que estão na rede para fazer testes. O comando é o airodump-ng que gera a seguinte saída:


BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID

00:24:6C:5B:5E:B1 -87 8 0 0 1 54e. OPN UFU-P
00:24:6C:5B:5E:B0 -87 8 1 0 1 54e. WPA2 CCMP MGT UFU-I
00:1A:1E:7A:CF:E1 -83 14 0 0 1 54e. OPN UFU-P
00:1A:1E:7A:CF:E0 -82 11 0 0 1 54e. WPA2 CCMP MGT UFU-I
00:1A:1E:7A:C9:01 -44 27 8 3 1 54e. OPN UFU-P
00:1A:1E:7A:C9:00 -45 27 0 0 1 54e. WPA2 CCMP MGT UFU-Iu
u
BSSID STATION PWR Rate Lost Packets Probes
u
(not associated) CC:C3:EA:D1:FD:57 -88 0 -12 2 2
(not associated) 14:2D:27:E2:63:FF -75 0 -12 19 3 UFU-Institu
(not associated) F4:8E:09:0B:C4:ED -87 0 -12 0 1 UFU-Institu
00:1A:1E:7A:C9:01 B4:52:7E:AA:4A:2B -72 0 - 9 0 1
00:1A:1E:7A:C9:01 68:A3:C4:3F:AC:87 0 9e- 0e 0 9
00:1A:1E:7A:C9:00 A8:8E:24:3C:65:2D -77 0 - 9 0 1



O que significa esse IFS do while? Pelo que eu entendi ele vai separar o que esta antes do que está depois de ":". Nesse meu caso eu só queria selecionar um indice e por ele pegar todos os valores. No seu caso ai, $key seria o que vem antes do ":" e $value o que vem depois? Outra coisa que eu não entendi são esses caracteres depois do sed: s/\s\+:\s\+/:/ qual a função deles pro comando o que eles modificam?
Fiz uma alteração no seu, fiz da seguinte maneira:

while IFS=':' read key value;
do
echo "key = $key; value = $value"
done << sed s/\s\+:\s\+/:/ airodump-ng

Nesse caso o sed é usado pra arquivos, aqui não á arquivo. Ele deve pegar os dados direto do shell. Pensei na possibilidade de jogar os valores usando sed pra um arquivo e depois ler usando sed. Tem outra coisa, quando eu faço por exemplo:


sudo airodump-ng mon0 >> saida.txt

Ele roda o comando ao invés de copiar pro arquivo. Queria copiar baseado nos parâmetros. Vou tentando qualquer coisa posto aqui.


textmode escreveu:


fabregas escreveu:

Não entendi esse código seu. Nunca trabalhei com o sed, mas eu quero pegar, ou seja, listar todos os parâmetros do retorno do comando, pra depois identificar e trabalhar com ele.



Aplicando o meu código ao exemplo que você mandou, a saída seria:


key = 'processor'; value = '0'
key = 'vendor_id'; value = 'GenuineIntel'
key = 'cpu family'; value = '6'
key = 'model'; value = '37'
key = 'model name'; value = 'Intel(R) Core(TM) i5 CPU M 460 @ 2.53GHz'
key = 'stepping'; value = '5'
key = 'microcode'; value = '0x2'
key = 'cpu MHz'; value = '1197.000'
key = 'cache size'; value = '3072 KB'
key = 'physical id'; value = '0'
key = 'siblings'; value = '4'
key = 'core id'; value = '0'
key = 'cpu cores'; value = '2'
key = 'apicid'; value = '0'
key = 'initial apicid'; value = '0'
key = 'fdiv_bug'; value = 'no'
key = 'f00f_bug'; value = 'no'
key = 'coma_bug'; value = 'no'
key = 'fpu'; value = 'yes'
key = 'fpu_exception'; value = 'yes'
key = 'cpuid level'; value = '11'


Ou seja, o nome do parâmetro fica dentro da variável "$key" e o valor do parâmetro fica dentro da variável "$value". Basta testar as duas para saber qual parâmetro é e qual valor possui.








10. Re: Pegar parâmetro de comando via arquivo shell

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/01/2015 - 17:53h

fabregas escreveu:

Minha real intenção é de pegar dados dos roteadores que estão na rede para fazer testes. O comando é o airodump-ng que gera a seguinte saída:


BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID

00:24:6C:5B:5E:B1 -87 8 0 0 1 54e. OPN UFU-P
00:24:6C:5B:5E:B0 -87 8 1 0 1 54e. WPA2 CCMP MGT UFU-I
00:1A:1E:7A:CF:E1 -83 14 0 0 1 54e. OPN UFU-P
00:1A:1E:7A:CF:E0 -82 11 0 0 1 54e. WPA2 CCMP MGT UFU-I
00:1A:1E:7A:C9:01 -44 27 8 3 1 54e. OPN UFU-P
00:1A:1E:7A:C9:00 -45 27 0 0 1 54e. WPA2 CCMP MGT UFU-Iu
u
BSSID STATION PWR Rate Lost Packets Probes
u
(not associated) CC:C3:EA:D1:FD:57 -88 0 -12 2 2
(not associated) 14:2D:27:E2:63:FF -75 0 -12 19 3 UFU-Institu
(not associated) F4:8E:09:0B:C4:ED -87 0 -12 0 1 UFU-Institu
00:1A:1E:7A:C9:01 B4:52:7E:AA:4A:2B -72 0 - 9 0 1
00:1A:1E:7A:C9:01 68:A3:C4:3F:AC:87 0 9e- 0e 0 9
00:1A:1E:7A:C9:00 A8:8E:24:3C:65:2D -77 0 - 9 0 1




Péssimas notícias, o exemplo real não tem [u]absolutamente[/u] relação alguma com o exemplo que você enviou inicialmente. Nenhuma ajuda enviada aqui pelo pessoal fórum foi útil ou ao menos é adaptável e isto é independente de linguagem e/ou ferramenta utilizada.

Para tentar lhe ajudar, falta descrever quais informações você pretende utilizar e como.



11. Parâmetros

Fabrício Lisbôa Franco
fabregas

(usa Outra)

Enviado em 13/01/2015 - 08:26h

Eu queria pegar somente o BSSID da rede, ou seja, o nome dela. E feito isso comparar dentro de estruturas condicionais(if, swtch etc). Tem como fazer isso usando bash?

textmode escreveu:

fabregas escreveu:

Minha real intenção é de pegar dados dos roteadores que estão na rede para fazer testes. O comando é o airodump-ng que gera a seguinte saída:


BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID

00:24:6C:5B:5E:B1 -87 8 0 0 1 54e. OPN UFU-P
00:24:6C:5B:5E:B0 -87 8 1 0 1 54e. WPA2 CCMP MGT UFU-I
00:1A:1E:7A:CF:E1 -83 14 0 0 1 54e. OPN UFU-P
00:1A:1E:7A:CF:E0 -82 11 0 0 1 54e. WPA2 CCMP MGT UFU-I
00:1A:1E:7A:C9:01 -44 27 8 3 1 54e. OPN UFU-P
00:1A:1E:7A:C9:00 -45 27 0 0 1 54e. WPA2 CCMP MGT UFU-Iu
u
BSSID STATION PWR Rate Lost Packets Probes
u
(not associated) CC:C3:EA:D1:FD:57 -88 0 -12 2 2
(not associated) 14:2D:27:E2:63:FF -75 0 -12 19 3 UFU-Institu
(not associated) F4:8E:09:0B:C4:ED -87 0 -12 0 1 UFU-Institu
00:1A:1E:7A:C9:01 B4:52:7E:AA:4A:2B -72 0 - 9 0 1
00:1A:1E:7A:C9:01 68:A3:C4:3F:AC:87 0 9e- 0e 0 9
00:1A:1E:7A:C9:00 A8:8E:24:3C:65:2D -77 0 - 9 0 1




Péssimas notícias, o exemplo real não tem [u]absolutamente[/u] relação alguma com o exemplo que você enviou inicialmente. Nenhuma ajuda enviada aqui pelo pessoal fórum foi útil ou ao menos é adaptável e isto é independente de linguagem e/ou ferramenta utilizada.

Para tentar lhe ajudar, falta descrever quais informações você pretende utilizar e como.







12. Re: Pegar parâmetro de comando via arquivo shell

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/01/2015 - 10:38h

fabregas escreveu:

Eu queria pegar somente o BSSID da rede, ou seja, o nome dela. E feito isso comparar dentro de estruturas condicionais(if, swtch etc). Tem como fazer isso usando bash?

[quote]fabregas escreveu:

Minha real intenção é de pegar dados dos roteadores que estão na rede para fazer testes. O comando é o airodump-ng que gera a seguinte saída:


BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID

00:24:6C:5B:5E:B1 -87 8 0 0 1 54e. OPN UFU-P
00:24:6C:5B:5E:B0 -87 8 1 0 1 54e. WPA2 CCMP MGT UFU-I
00:1A:1E:7A:CF:E1 -83 14 0 0 1 54e. OPN UFU-P
00:1A:1E:7A:CF:E0 -82 11 0 0 1 54e. WPA2 CCMP MGT UFU-I
00:1A:1E:7A:C9:01 -44 27 8 3 1 54e. OPN UFU-P
00:1A:1E:7A:C9:00 -45 27 0 0 1 54e. WPA2 CCMP MGT UFU-Iu
u
BSSID STATION PWR Rate Lost Packets Probes
u
(not associated) CC:C3:EA:D1:FD:57 -88 0 -12 2 2
(not associated) 14:2D:27:E2:63:FF -75 0 -12 19 3 UFU-Institu
(not associated) F4:8E:09:0B:C4:ED -87 0 -12 0 1 UFU-Institu
00:1A:1E:7A:C9:01 B4:52:7E:AA:4A:2B -72 0 - 9 0 1
00:1A:1E:7A:C9:01 68:A3:C4:3F:AC:87 0 9e- 0e 0 9
00:1A:1E:7A:C9:00 A8:8E:24:3C:65:2D -77 0 - 9 0 1




Comparar com o quê? Teria um exemplo prático? Para cada intenção, dezenas de soluções podem ser desenvolvidas e ainda assim nenhuma delas lhe servir.

Nesse exemplo, o BSSID está no primeiro "campo" do primeiro "bloco" e no primeiro e segundo "campos" do segundo "bloco", daí já precismos de algumas definições:

- Por "bloco" refiro-me a cada trecho do arquivo com cabeçalhos distinto e separados por um linha em branco. Poderia-se até chamar de parágrafo, não precisamos de definição formal mesmo :P

- Por "campo" refiro-me ao aspecto visual do texto, existem informações iniciando em colunas específicas, o que faz cada "bloco" ser do tipo "campo fixo".

O primeiro exemplo que você mandou era um texto "chave valor", cujo separador era o primeiro caractere dois-pontos (:) e sem espaços nas extremidades de cada "chave" ou "valor".

Disto este monte de abobrinhas :P ... existem dezenas de formas de extrair esse BSSID daí para fazer comparações, vai depender apenas do que será comparado. Por exemplo, se for para fazer comparações com informações dentro do mesmo texto, segue-se um caminho, para fazer comparações com informações de outros fontes, o caminho a seguir já será completamente diferente. Quanto mais específico você for, mais precisas serão as respostas.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts