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

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

Re: [shell-script] variável no for com espaço


From: Fabiano Caixeta Duarte
Subject: Re: [shell-script] variável no for com espaço
Date: Sun, 7 Mar 2010 19:03:33 -0300

Em 7 de março de 2010 13:56, Deivid <address@hidden> escreveu:
> Pessoal se puderem ajudar agradeço.
>
> A situação é a seguinte:
> considerem o arquivo teste.txt
>
> root@server#cat teste.txt
> Login;Descricao do Grupo;Descricao do Login;Home;Shell
> deivid;Grupo do Suporte;Deivid Vilela;/home/deivid;/bin/bash
> root@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
>
> root@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 "------------------------------------------------"
> root@server#
>
> Vejam a saída que esse script produz:
> root@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
> ------------------------------------------------
> root@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: address@hidden
> ---------------------------------------------------------------------
> 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


reply via email to

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