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 21:07:23 -0300

Já que estamos falando direto em variáveis, muito pouca gente usa a
diretiva declare e ela é muito útil. Veja um trecho que copiei do Papo de
Botequim<https://wiki.softwarelivre.org/TWikiBar/TWikiBarBirinaite#Usando_declaratives>
:
======================================================
Para termos somente maiúsculas em uma variável também podemos declará-la
usando a opção -u (de uppercase = maiúscula). Veja:
$ declare -u Maiusc

Uma vez assim declarada, veja este exemplo:

$ read -p "Tecle algo: " Maiusc  # A variável Maiusc receberá o que for
teclado
Tecle algo: converte para maiusculas
$ echo $Maiusc
CONVERTE PARA MAIUSCULAS

O inverso disso seria usarmos a opção -l (de lowercase = minúscula). Veja:

$ declare -l Minusc
$ read -p "Tecle algo: " Minusc  # A variável Minusc receberá o que for
teclado
Tecle algo: CONVERTE PARA MINUSCULAS
$ echo $Minusc
converte para minusculas

Tudo que foi dito sobre estas conversões, só é valido após o declare ter
sido feito. Repare:

$ var="xxxx" #  Vou atribuir antes de declarar
$ declare -u var
$ echo $var
xxxx         # Nada mudou, continua minúscula
$ var="xxxx" # Atribuindo após declaração
$ echo $var
XXXX        # Agora funcionou...
=====================================================
Abcs,
Julio

*
*



Em 3 de junho de 2012 10:24, Tiago Peczenyj <address@hidden>escreveu:

> **
>
>
> Claro Julio, eu entendi.
>
> Eu só fico na duvida de qual seria a melhor situação para não usar
> vetores. algum one-liner sadado?
>
> 2012/6/3 Julio C. Neves <address@hidden>:
> > 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]
> >
> >
> >
> > ------------------------------------
> >
> > ----------------------------------------------------------
> > 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]