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 >
