Pessoal
Obrigado pela ajuda
Consegui resolver com o while mesmo, porém sem usar o IFS.
Vejam o resultado abaixo

#!/bin/sh

while read linha
do
  login="$(echo $linha | cut -d";" -f1)"
  grupo="$(echo $linha | cut -d";" -f2)"
  dslgn="$(echo $linha | cut -d";" -f3)"
  home="$(echo $linha | cut -d";" -f4)"
  shell="$(echo $linha | cut -d";" -f5)"
  echo "Criando conta $login"
  useradd -d $home -g $grupo -c "$dslgn" -s $shell -p teste $login
done < teste.csv



--- Em [email protected], Fabiano Caixeta Duarte <fcd.lis...@...> 
escreveu
>
> Em 7 de março de 2010 13:56, Deivid <deividvil...@...> escreveu:
> > Pessoal se puderem ajudar agradeço.
> >
> > A situação é a seguinte:
> > considerem o arquivo teste.txt
> >
> > r...@server#cat teste.txt
> > Login;Descricao do Grupo;Descricao do Login;Home;Shell
> > deivid;Grupo do Suporte;Deivid Vilela;/home/deivid;/bin/bash
> > r...@server#
> >
> > Preciso usar este arquivo para criar usuários em lote.
> > um "for" resolveria perfeitamente se não fosse por um detalhe simples, eu 
> > não consigo trazer o conteúdo das colunas 2 e 3 com os espaços.
> > O "for" quebra isso em dados diferentes.
> >
> > Vejam
> >
> > r...@server#cat teste.sh
> > #!/bin/bash
> >
> > echo "------------------------------------------------"
> > echo "Saida do awk sem o for"
> > awk '{ split ($0, a, ";"); print a[2] }' teste.txt
> > echo "------------------------------------------------"
> > echo "Saida do awk quando armazenado na variavel \$conta"
> > for conta in $(awk '{ split ($0, a, ";"); print a[2] }' teste.txt)
> >        do
> >        echo $conta
> >        done
> > echo "------------------------------------------------"
> > r...@server#
> >
> > Vejam a saída que esse script produz:
> > r...@server#./teste.sh
> > ------------------------------------------------
> > Saida do awk sem o for
> > Descricao do Grupo
> > Grupo do Suporte
> > ------------------------------------------------
> > Saida do awk quando armazenado na variavel $conta
> > Descricao
> > do
> > Grupo
> > Grupo
> > do
> > Suporte
> > ------------------------------------------------
> > r...@server#
> >
> > Se alguem conhecer uma forma de trazer o resultado com os espaços dentro do 
> > "for" serei muito grato ;-)
> >
> >
> >
> >
> >
> >
> > ------------------------------------
> >
> > ---------------------------------------------------------------------
> > Esta lista não admite a abordagem de outras liguagens de programação, como 
> > perl, C etc. Quem insistir em não seguir esta regra será moderado sem 
> > prévio aviso.
> > ---------------------------------------------------------------------
> > Sair da lista: [email protected]
> > ---------------------------------------------------------------------
> > Esta lista é moderada de acordo com o previsto em 
> > http://www.listas-discussao.cjb.net
> > ---------------------------------------------------------------------
> > Servidor Newsgroup da lista: news.gmane.org
> > Grupo: gmane.org.user-groups.programming.shell.brazil
> >
> > Links do Yahoo! Grupos
> >
> >
> >
> 
> Há n formas de fazer isto, mas as mais fáceis envolvem a utilização do
> IFS (Input Field Separator), que no seu caso é o caracter ;
> 
> Uma forma
> IFS=";"; while read a b c d e; do echo $b; done < arquivo
> Descricao do Grupo
> Grupo do Suporte
> 
> Outra forma
> IFS=";"; while read; do set - $REPLY; echo $2; done < arquivo
> Descricao do Grupo
> Grupo do Suporte
> 
> 
> -- 
> Fabiano Caixeta Duarte
> Especialista em Redes de Computadores
> Linux User #195299
> Ribeirão Preto - SP
>


Responder a