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

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

Re: [shell-script] Guardar valor de saida de comando em variavel


From: Julio C. Neves
Subject: Re: [shell-script] Guardar valor de saida de comando em variavel
Date: Sun, 3 Jun 2012 10:21:49 -0300

Fala Tiago,
Como eu disse no meu pitaco anterior, creio que a solução por vetores
proposta pelo Fernando seja melhor que a minha, mas dei aquele pitaco pq o
nosso amigo Fernando, insinuou que não dava para fazer em Shell. Como uma
das frases que mais uso é:

- "Nunca pergunte se dá para fazer em Shell. A pergunta correta é: qual é a
melhor forma de fazer em Shell."

Decidi mostrar para a lista que dá para fazer em Shell, graças ao eval, que
foi usado pela 1a. vez no ksh e incorporado a diversas linguagens como o C
e até o Java (argh).

Por outro lado, poucos sabem que o eval é um intrínseco (buitin) e por isso
seu tempo de execução não compromete o desempenho.

Abcs,
Julio

*
*



Em 3 de junho de 2012 09:59, Tiago Peczenyj <address@hidden>escreveu:

> **
>
>
> Pessoalmente eu evitaria criar variaveis do tipo
>
> alguma_coisa_1
> alguma_coisa_2
> alguma_coisa_3
>
> justamente porque é dificil acessa-las ou descobrir quantas ou quais
> existem. nesses casos o array serve como uma luva.
>
> por outro lado pode ser que dado uma condição devemos criar uma
> variavel com determinadas caracteristicas. isso pode ser util em um
> caso mais complicado, quando queremos criar um script de build de
> algum aplicativo que dependendo do sistema operacional e arquitetura
> precisa de um set de variaveis diferente E existe alguma regra facil
> para criar os nomes, porém mesmo assim acredito que existe alguma
> ferramenta que facilita isso sem recorrer a eval's por exemplo.
>
> 2012/6/3 Julio C. Neves <address@hidden>:
> > Fala Fernando,
> > provavelmente o uso de vetores, como vc sugeriu, é a melhor solução e,
> como
> > vc disse, em muitas linguagens (e conheço diversas) não é possível usar
> > variáveis como nome de variáveis, mas em shell existe o evel. Enrola a
> > guerra, mas resolve.
> >
> > Suponha que eu queira guardar a saída de um ls em uma variável que tem
> uma
> > variável no nome. Veja:
> >
> > i=12
> > eu quero colocar em a$ib (a12b) a saída do ls. Faço assim:
> >
> > $ var="a${i}b=\"$(ls)\""
> >
> > repare que as \" são para colocar aspas literais na saída, pois o ls tem
> > <ENTER> no meio e quero preservá-los. Veja a continuação:
> >
> > $ echo "$var" # veja que a atribuição já esta pronta em $var
> > a12b="crachafoto.sh
> > cracha.yad
> > Foto1.jpeg
> > Foto.jpeg"
> > $ eval "$var"   # este é o pulo do gato do shell
> > $ echo "$a12b"  # Pronto. Acabou-se tudo.
> > crachafoto.sh
> > cracha.yad
> > Foto1.jpeg
> > Foto.jpeg
> >
> > Abcs,
> > Julio
> >
> > *
> > *
> >
> >
> >
> > Em 3 de junho de 2012 01:06, Fernando Mercês <address@hidden>
> escreveu:
> >
> >> **
> >>
> >>
> >> Opa, creio não ser possível fazer o que você quer deste jeito. O que
> você
> >> está tentando é declarar variáves com nomes variáveis e eu nunca vi
> isso em
> >> nenhuma linguagem (não conheço muitas, nem sou nenhum programador de
> >> verdade), mas enfim, eu acho que utilizar um array resolveria:
> >>
> >> for i in {2..5}; do
> >> mpls[$i]="saida do comando $i"
> >> done
> >>
> >> Aí você pode acessar ${mpls[2]}, ${mpls[3]} etc. O que acha?
> >>
> >> Abraço.
> >>
> >> Att,
> >>
> >> Fernando Mercês
> >> Linux Registered User #432779
> >> www.mentebinaria.com.br
> >> ------------------------------------
> >> "Ninguém pode ser escravo de sua identidade; quando surge uma
> possibilidade
> >> de mudança é preciso mudar". (Elliot Gould)
> >>
> >> On Sat, Jun 2, 2012 at 6:00 PM, edmundo_goncalves <
> >> address@hidden> wrote:
> >>
> >> > **
> >> >
> >> >
> >> > Olá pessoal!
> >> >
> >> > Não consigo guardar valor de saida de comando na variável, tentei de
> duas
> >> > formas
> >> >
> >> > for i in `seq 2 5` ; do
> >> > snmpwalk -v 1 -c public -Oqv 192.168.1.8 IF-MIB::ifInOctets."$i" >
> >> > tmp/"$i"_down1
> >> > snmpwalk -v 1 -c public -Oqv 192.168.1.8 IF-MIB::ifOutOctets."$i" >
> >> > tmp/"$i"_up1
> >> > mpls_"$i"_down1=`cat tmp/"$i"_down1`
> >> > mpls_"$i"_up1=`cat tmp/"$i"_up1`
> >> > done
> >> >
> >> > porem ao executar ele me mostra por exemplo: mpls_2_down1=2960014678:
> >> > command not found
> >> >
> >> > segunda forma:
> >> >
> >> > for i in `seq 2 5` ; do
> >> > mpls_"$i"_down1=$(snmpwalk -v 1 -c public -Oqv 192.168.1.8
> >> > IF-MIB::ifInOctets."$i")
> >> > mpls_"$i"_up1=$(snmpwalk -v 1 -c public -Oqv 192.168.1.8
> >> > IF-MIB::ifOutOctets."$i")
> >> > done
> >> >
> >> > porem ao executar ele me mostra por exemplo: mpls_2_down1=2960169411:
> >> > command not found
> >> >
> >> > Obrigado a todos que poderem me ajudar!
> >> >
> >> >
> >> >
> >>
> >> [As partes desta mensagem que não continham texto foram removidas]
> >>
> >>
> >>
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
> > ------------------------------------
> >
> > ----------------------------------------------------------
> > 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
> >
> >
>
> --
> Tiago B. Peczenyj
> Linux User #405772
>
> http://pacman.blog.br
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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