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

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

Re: [shell-script] Comportamento estranho do array no for


From: Julio C. Neves
Subject: Re: [shell-script] Comportamento estranho do array no for
Date: Thu, 1 Feb 2018 17:00:12 -0200

Não me debrucei muito tempo no teu problema, mas me parece que o problema está no sort -u, pq me parece que o que vc deseja é excluir usuários duplicados e vc está excluindo registros duplicado, que creio não haver.

Acho que vc quer algo mais ou menos assim: 

Usus=$(sed -r '/OK LOGIN/ !d; s/.*\[(.*)\].*/^\1:/' messages | sort -u)
grep -f <(echo "$Usus") /etc/passwd | cut -f6 -d:

Não testei nem nada, mas vê se é isso. Se for assim e vc não entender, pergunte que explico melhor (até pq não expliquei nada) ;)

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» O treinamento está muito caro?

Ministramos um excelente treinamento de Shell,
no formato EAD. Veja os detalhes aqui.

Damos treinamento em sua empresa com certificado
e nota fiscal por um preço, no mínimo, 50% abaixo
de qualquer curso.

​​
Nosso time de instrutores in company é formado somente por
autores
​ ​
de Best Sellers
​ ​
​laureados ​sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico









Em 1 de fevereiro de 2018 14:35, Marlon Reck address@hidden [shell-script] <address@hidden.br> escreveu:
 

Boa tarde Mestres

Estou fazendo uma linha de comando para comparar o usuário de login do ftp com o diretório do usuário cadastrado, para isso estou analisando os arquivos "messages" e "password". Só que me deparei com um comportamento que não consegui compreender e peço para entender o que esta ocorrendo. 
O caso é  é que um dos resultados acaba sendo duplicado no fim do comando.
Abaixo esta a síntese que vou tentar explicar e também no pastebin, tem o exemplo do arquivo messages, outros comandos que tentei  e o exemplo com o comando "echo".

Comando completo:
for i in $(grep "OK LOGIN" messages |awk 'gsub (/[\[\]]/,"",$13) {print $13}'|sort -u);do awk -F: /"$i"/'{print $1"==="$6}' /etc/passwd ;done

1=Primeiro pego o usuário que logou com o "grep", depois limpo a sujeira com o "awk" e deixo um registro apenas com o "sort":
grep "OK LOGIN" messages |awk 'gsub (/[\[\]]/,"",$13) {print $13}'|sort -u

2=Segundo transformo o resultado num array pra usar no loop "for":
for i in $(grep "OK LOGIN" messages |awk 'gsub (/[\[\]]/,"",$13) {print $13}'|sort -u);do

3=Terceiro com o loop do for faço a comparação de cada item do array com o arquivo "passwd":
 awk -F: /"$i"/'{print $1"==="$6}' /etc/passwd ;done

É nesse ponto que acontece a repetição do resultado que não consegui entender.
Se trocar essa parte do código por um "grep" (grep $i ) também tenho o resultado duplicado, isso só não acontece quando uso o "echo" ( echo $i ).

4=O resultado:
dba<==>/srv/ftp/dba
dvgp<==>/srv/ftp/dvgp
dvgp_visita<==>/srv/ftp/dvgp
gpsveicular<==>/srv/ftp/dvgp/atualiza-gps-veicular/
dvod<==>/srv/ftp/dvod
gpsveicular<==>/srv/ftp/dvgp/atualiza-gps-veicular/



Desde já agradeço e obrigado.
Atenciosamente
Marlon V. Reck
address@hidden





reply via email to

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