Duvida subtituição variavel [RESOLVIDO]

1. Duvida subtituição variavel [RESOLVIDO]

André Sippert Motta
mottinha

(usa Suse)

Enviado em 23/12/2009 - 20:53h

Opa pessoal! blz?
Seguinte, conforme simples script abaixo:

#!/bin/sh
echo "Digite o numero 1 ou 2:";read numero
nome1="ANDRE"
nome2="MARCELO"
nome_numero='$nome'$numero
echo $nome_numero

Gostaria que a variável $nome_numero fosse "ANDRE" ao digitar 1 e nao "$nome1" como está ocorrendo.
Como posso resolver esse caso?

Desde já agradeço!

Feliz Natal a todos e Feliz Ano Novo!


  


2. Re: Duvida subtituição variavel [RESOLVIDO]

Rodrigo Chaves
stilldre

(usa Funtoo)

Enviado em 23/12/2009 - 21:53h

é só tirar as aspas em nome_numero='$nome'$numero e deixar assim: nome_numero=$nome $numero


3. Re: Duvida subtituição variavel [RESOLVIDO]

Ruy Rocha
unixgeek

(usa Fedora)

Enviado em 23/12/2009 - 23:41h

Perfeito. Existem ao menos 3 maneiras de fazer o que você quer:

- um if
if [ $numero -eq '1' ]; then echo "ANDRE"; else echo "MARCELO"; fi

- usar um case
case $numero in 1) echo "ANDRE";; 2) echo "MARCELO";; esac

Apesar do if e do case te ajudarem não fazem o que você quer. Para fazer o que quer, exatamente (com todas as letras), vamos usar um array:

NOMES=(ANDRE MARCELO JORJAO); read numero; echo ${NOMES[$numero]}

Certo. Se você testar com o número 3, vai ver que não funciona. Isto porque começamos a contar do zero. Para resolver, vamos subtrair um de cada numero que lemos, ficando:
NOMES=(ANDRE MARCELO JORJAO); read numero; echo ${NOMES[$((numero - 1))]}

Repare no $((numero - 1)). É excelente para pequenos cálculos.

[]s




4. Re: Duvida subtituição variavel [RESOLVIDO]

André Sippert Motta
mottinha

(usa Suse)

Enviado em 24/12/2009 - 13:29h

stilldre

eu coloquei aspa em $nome pq a variavel nome_numero quando digito 1 tem q virar a variavel nome1 que é igual a "ANDRE", só que a resposta que o echo está exibindo é "$nome1"

olha soh esse outro exemplo semelhante:
#!/bin/sh
echo "Digite o primeiro nome:";read nome1
echo "Digite o segundo nome:";read nome2
echo "Digite o numero 1 ou 2:";read numero
nome_numero='$nome'$numero
echo $nome_numero

No caso se eu digitar primeiro nome JOAO e o segundo MARIA e digitar o numero 2, gostaria que exibisse o nome MARIA e nao $nome2 como está ocorrendo.

Na verdade, o scritp q estou montando vai ter uns 10 ou 20 nomes, e vai ter um loop que vai ter q executar uma tarefa pra cada nome, por isso preciso dessa substituição.

Esses nomes vao mudar constantemente.


5. Re: Duvida subtituição variavel [RESOLVIDO]

Denis Doria
thuck

(usa Debian)

Enviado em 24/12/2009 - 14:17h

Vc precisa usar expansão indireta para fazer isso, ex:

#!/bin/bash
echo "Digite o primeiro nome:";read nome1
echo "Digite o segundo nome:";read nome2
echo "Digite o numero 1 ou 2:";read numero
nome_numero=nome$numero
echo ${!nome_numero}



6. Re: Duvida subtituição variavel [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/12/2009 - 15:09h

nao sei se ta meiu gambiarra, mas ta funcionando xD

-------------------------------------------------

#!/bin/sh

echo "Digite o primeiro nome:";read nome1
echo "Digite o segundo nome:";read nome2
echo "Digite o numero 1 ou 2:";read numero
nome_numero=`echo "$nome1 $nome2" | cut -f$numero -d" "`
echo "$nome_numero"

-------------------------------------------


7. Eval

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 24/12/2009 - 16:37h

Existe um comando no linux que se chama eval e que se encaixa perfeitamente neste seu caso:

numero=1
nome1='ANDRE'

Faça:
eval echo '$nome'$numero

O shell irá expandir:
echo '$nome'$numero
para
echo $nome1

logo o eval se encarrega de executar os parâmetros do jeitinho que eles vieram:

eval echo $nome1
$ echo $nome1
ANDRE

Abraços
Feliz Natal e um saudoso 2010!


8. Re: Duvida subtituição variavel [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 25/12/2009 - 01:24h

tbm axo melho do jeito do daemonio

nao testei, mas desse jeito o codigo fica mais limpo doq eu t passei


9. Re: Duvida subtituição variavel [RESOLVIDO]

Ricardo Cardoso
Ricardo Cardoso

(usa Debian)

Enviado em 25/12/2009 - 01:35h

nome_numero=$nome1
echo "$nome_numero"


10. Re: Duvida subtituição variavel [RESOLVIDO]

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 25/12/2009 - 14:08h

Tipo, acho a expansão de parâmetros que o thuck mostrou o método mais rápido.

Como a expansão é built-in do bash, a operação ocorre mais rapidamente do que
utilizando eval, ou cut.

O eval é útil quando você está construindo um comando em uma variável e quer executar o conteúdo dessa
variável diretamente no shell, ou quando a saída de um programa ou de um arquivo é um comando do shell.

Espero ter ajudado!
Abraços



11. Re: Duvida subtituição variavel [RESOLVIDO]

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 26/12/2009 - 01:50h

Como você quer associar um número a um nome, você deverá fazer como o unixgeek falou, ou você usa um if (ou case) ou ainda um vetor. Nesse exemplo básico abaixo, foi utilizando um vetor:

--------------
echo -n "Digite o primeiro nome: "
read nome1
echo -n "Digite o segundo nome: "
read nome2

nomes=($nome1 $nome2)

echo -n "Digite o numero 1 ou 2: "
read numero

echo "${nomes[$((numero - 1))]}"
--------------


12. Re: Duvida subtituição variavel [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 28/12/2009 - 10:14h

Sem mexer muito eu faria assim:




#!/bin/sh
echo " Digite o numero 1 ou 2:";read numero
nome1="ANDRE"
nome2="MARCELO"
nome_numero='$nome'$numero
eval "echo $nome_numero"







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts