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

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

Re: [shell-script] Melhoria de script [base passwd]


From: Jose NIEVIADONSKI
Subject: Re: [shell-script] Melhoria de script [base passwd]
Date: Wed, 26 Mar 2003 17:53:48 -0300

Pessoal

Se vocês querem rapidez, tentem isso.

Nesse exemplo (infelizmente somente testado em ksh) não é criado NENHUM
processo UNIX, sendo TOTALMENTE rodado dentro do ksh

IFSANT=$IFS   # Salvando o Internal Field Separator
IFS=":"       # Assinalando o ":" como separador de campo para o comando
read
exec 3</etc/passwd  # Abrindo o descritor 3 como sendo leitura do arquivo
/etc/passwd
while read -u3 user senha uid gid descricao home shell   # Mágica. Lê do
descritor 3 e
                                                         # ainda separa os
campos usando
                                                         # o IFS, tudo
automaticamente
do
  echo "Login: $user" #Agora é so mostrar o valor das variáveis
  echo "Id   : $uid"
  echo "Gid  : $gid"
done
3<&-          # Fechando o descritor
IFS=$IFSANT   # Restaurando o Internal Field Separator

Para verificar a rapidez dessa solução, coloque o script dentro de um
arquivo e veja os tempos com time.

Estou dando curso agora e não pude fazer os benchmark de todas as soluções
propostas. Sugiro que alguém com um pouco mais de tempo verifique a retorne
para a lista os tempos de todas as soluções propostas que apareceram na
lista.

Resultado da Solução acima
real    0m0.14s
user    0m0.05s
sys     0m0.10s

Resultado da Solução abaixo
real    0m7.82s
user    0m0.95s
sys     0m3.81s

Meu arquivo /etc/passwd possui atualmente 49 usuários cadastrados

Acho que vale a pena continuar a discussão sobre performance sempre que
surgir a oportunidade.

P.S. Se alguém com bash puder testar a minha solução. Também não sei se a
mesma roda em bash. Mas mesmo que a mesma sirva somente para ksh, acho
válido para aqueles que possuem ou usam o ksh


Abraços a todos da lista

José Augusto Martins Nieviadonski
Analista de Sistemas Consultor
HSBC Bank Brasil S.A. - Banco Múltiplo
Treinamento de informática
Fone : 41 340-5378 - Fax : 41 340-5011

      Para: address@hidden
      cc:
      cco:  Jose NIEVIADONSKI/HBBR/HSBC
      Assunto:    Re: [shell-script] Melhoria de script [base passwd]
Ulysses Almeida <address@hidden>

26/03/2003 05:34 PM
Favor responder a shell-script            <font size=-1></font>
Um split eu nao conheço, mas o script a baixo fica bem mais rapido,
para fazer a mesma coisa!

#!/bin/bash

for i in $(cat /etc/passwd |cut -d':' -f1,3,4); do
echo "Login: `echo $i|cut -f1 -d':'`"
echo "Id: `echo $i|cut -f2 -d':'`"
echo "Gid: `echo $i|cut -f3 -d':'`"
done

pois o script acima gera menos processos, e o que eh melhor, menos
leitura em HD (apenas um cat).

[]s

On Wed, Mar 26, 2003 at 05:04:43PM -0300, Reinaldo Carvalho wrote:
>
> Qual a melhor maneira de fazer isso, existe algum SPLIT por ':'?:
>
> for i in $(cat /etc/passwd | cut -f1 -d ':') ; do
>
> ID=$(cat /etc/passwd | grep -e "^$i:" | cut -f3 -d ':')
> GID=$(cat /etc/passwd | grep -e "^$i:" | cut -f4 -d ':')
>
> echo "Login: $i"
> echo "Id: $ID"
> echo "Gid: $GID"
>
> done

--
.~.  Ulysses Almeida
/ V \  address@hidden
/ (   ) \  Seja livre, use GNU/Linux!
^^-^^




This E-mail confidential. It may also be legally privileged. If you are not the 
addressee you may not copy, forward, disclose or use any part of it. If you 
have received this message in error, please delete it and all copies from your 
system and notify the sender immediately by return E-mail.
Internet communications cannot be guaranteed to be timely, secure, error or 
virus-free. The sender does not accept liability for any errors or omissions.
 
Esta mensagem pode conter informação confidencial e/ou privilegiada. Se você 
não for o destinatário ou a pessoa autorizada a receber esta mensagem, não pode 
usar, copiar ou divulgar as informações nela contidas ou tomar qualquer ação 
baseada nessas informações. Se você recebeu esta mensagem por engano, por favor 
avise imediatamente o remetente, respondendo o e-mail e em seguida apague-o.
Comunicações pela Internet não podem ser garantidas quanto à segurança ou 
inexistência de erros, ou contendo vírus. O remetente por esta razão não aceita 
responsabilidade por qualquer erro ou omissão no contexto da mensagem 
decorrente da transmissão via Internet.



reply via email to

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