Linha - Comando de Condiçao [RESOLVIDO]

1. Linha - Comando de Condiçao [RESOLVIDO]

Arthur Coscarelli
acoscarelli

(usa Ubuntu)

Enviado em 08/02/2013 - 15:53h

Pessoal, boa tarde ...

Alguem teria algum link no qual consiga explicar o comando de repetição detalhado.


Estou criando um script e apanhando muito na hora do de condiçao.


VAR='1'

if [ $VAR -eq '1,2,3,4,5,6' ]
then
....
else
....
fi

A minha duvida seria, eu consigo fazer com que minha VAR seja comparado com uma quantidade de numeros ?

Valeu pela ajuda

Abraços


  


2. MELHOR RESPOSTA

Danilo Josino
djosino

(usa Ubuntu)

Enviado em 18/02/2013 - 12:37h

no caso da negação tu usaria !

if [[ 1 =~ [1,2,3,4,5,6] && ! (2 =~ [1,2,3,4,5,6]) ]]

3. Re: Linha - Comando de Condiçao [RESOLVIDO]

Danilo Josino
djosino

(usa Ubuntu)

Enviado em 08/02/2013 - 16:52h

mais perto que cheguei foi



if [[ 1 =~ [1,2,3,4,5,6] ]]; then echo "ye"; else echo "no"; fi








4. Re: Linha - Comando de Condiçao [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 14/02/2013 - 17:30h

acoscarelli escreveu:

Pessoal, boa tarde ...

Alguem teria algum link no qual consiga explicar o comando de repetição detalhado.


Estou criando um script e apanhando muito na hora do de condiçao.


VAR='1'

if [ $VAR -eq '1,2,3,4,5,6' ]
then
....
else
....
fi

A minha duvida seria, eu consigo fazer com que minha VAR seja comparado com uma quantidade de numeros ?

Valeu pela ajuda

Abraços


Opa acoscarelli, beleza?

Em outro tópico te indiquei um livro. Segue um trecho que fala sobre sua dúvida: http://aurelio.net/shell/canivete/#test

Então, no exemplo que você citou, está comparando um número (que está em VAR) com uma string ('1,2,3,4,5,6'). Isso não é possível, pois ou compramos número com número ou string com string.

'1,2,3,4,5,6' é uma sequêcia de número e não um número. Na pratica torna-se uma string, pois tem vŕgula no meio, então você tem que usar o parâmetro de teste correto (veja o link que te mandei), que neste caso será o "=". O '-eq' testa números e o '=' testa strings.

Perceba que ao rodar da forma que você escreveu retorna este erro:
-su: [: 1,2,3: esperado expressão de número inteiro

Agora substitua o '-eq' pelo '=':

if [ $VAR = '1,2,3,4,5,6' ]
then
echo "igual"
else
echo "diferente"
fi

Não esqueça de atribuir valor a VAR.
Até mais.




5. Re: Linha - Comando de Condiçao [RESOLVIDO]

Arthur Coscarelli
acoscarelli

(usa Ubuntu)

Enviado em 16/02/2013 - 15:37h

pmartelotta escreveu:

acoscarelli escreveu:

Pessoal, boa tarde ...

Alguem teria algum link no qual consiga explicar o comando de repetição detalhado.


Estou criando um script e apanhando muito na hora do de condiçao.


VAR='1'

if [ $VAR -eq '1,2,3,4,5,6' ]
then
....
else
....
fi

A minha duvida seria, eu consigo fazer com que minha VAR seja comparado com uma quantidade de numeros ?

Valeu pela ajuda

Abraços


Opa acoscarelli, beleza?

Em outro tópico te indiquei um livro. Segue um trecho que fala sobre sua dúvida: http://aurelio.net/shell/canivete/#test

Então, no exemplo que você citou, está comparando um número (que está em VAR) com uma string ('1,2,3,4,5,6'). Isso não é possível, pois ou compramos número com número ou string com string.

'1,2,3,4,5,6' é uma sequêcia de número e não um número. Na pratica torna-se uma string, pois tem vŕgula no meio, então você tem que usar o parâmetro de teste correto (veja o link que te mandei), que neste caso será o "=". O '-eq' testa números e o '=' testa strings.

Perceba que ao rodar da forma que você escreveu retorna este erro:
-su: [: 1,2,3: esperado expressão de número inteiro

Agora substitua o '-eq' pelo '=':

if [ $VAR = '1,2,3,4,5,6' ]
then
echo "igual"
else
echo "diferente"
fi

Não esqueça de atribuir valor a VAR.
Até mais.



Certo. Como que ficaria então caso eu queira fazer duas comparações dentro do if ..

EXEMPLO:


if [ $VAR1 = '1,2,3,4,5,6' && $VAR = '1,2,3,4,5,6' ]

estaria certo essa expressão ?




6. Re: Linha - Comando de Condiçao [RESOLVIDO]

Danilo Josino
djosino

(usa Ubuntu)

Enviado em 18/02/2013 - 08:27h

VAR1 = '1,2,3,4,5,6'

só vai retornar verdadeiro se sua variavel for '1,2,3,4,5,6'

acho que a solução que te dei usado expressão regular é a melhor pro teu caso


7. Re: Linha - Comando de Condiçao [RESOLVIDO]

Danilo Josino
djosino

(usa Ubuntu)

Enviado em 18/02/2013 - 08:28h

http://www.vivaolinux.com.br/dica/Utilizando-arrays-em-shell-script

olha exemplo de como trabalhar com array, e depois utiliza a logica que te mandei


8. Re: Linha - Comando de Condiçao [RESOLVIDO]

Arthur Coscarelli
acoscarelli

(usa Ubuntu)

Enviado em 18/02/2013 - 09:10h

djosino escreveu:

mais perto que cheguei foi



if [[ 1 =~ [1,2,3,4,5,6] ]]; then echo "ye"; else echo "no"; fi







Vou dar uma olhada nos arrays ... Essa linha aqui de cima deu certinho para o que eu precisava .

Agora só esse caso dos arrays que to perdido ... no caso eu tenho duas variáveis e precisava que por condiçoes nas duas na mesma linha.

Ainda to apanhando sobre isso ... Seria basicamente o que voce me mandous ... porem com duas variaveis.

if [[ 1 =~ [1,2,3,4,5,6] ]] E [[ 2 =~ [1,2,3,4,5,6] ]]

Vou olhar os arrays e posto aqui depois o resultado


9. Re: Linha - Comando de Condiçao [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/02/2013 - 10:02h

acoscarelli escreveu:

djosino escreveu:

mais perto que cheguei foi

if [[ 1 =~ [1,2,3,4,5,6] ]]; then echo "ye"; else echo "no"; fi



Vou dar uma olhada nos arrays ... Essa linha aqui de cima deu certinho para o que eu precisava .

Agora só esse caso dos arrays que to perdido ... no caso eu tenho duas variáveis e precisava que por condiçoes nas duas na mesma linha.

Ainda to apanhando sobre isso ... Seria basicamente o que voce me mandous ... porem com duas variaveis.

if [[ 1 =~ [1,2,3,4,5,6] ]] E [[ 2 =~ [1,2,3,4,5,6] ]]

Vou olhar os arrays e posto aqui depois o resultado


É verdade, pro que você quer, o post do djosino é ideal.

Sobre o "e" lógico, no link que mandei tem falando.

if [[ 1 =~ [1,2,3,4,5,6] && 2 =~ [1,2,3,4,5,6] ]]

Não entendi o porque do '&&' ter funcionado neste caso, ao invés do '-a'. Pois '&&' é um operador lógico global e o '-a' é o 'e' lógico do comando teste. Mas vou procurar saber. A princípio a linha que coloquei acima funciona.

Até mais.


10. Re: Linha - Comando de Condiçao [RESOLVIDO]

Arthur Coscarelli
acoscarelli

(usa Ubuntu)

Enviado em 18/02/2013 - 11:28h

pmartelotta escreveu:

Vou dar uma olhada nos arrays ... Essa linha aqui de cima deu certinho para o que eu precisava .

Agora só esse caso dos arrays que to perdido ... no caso eu tenho duas variáveis e precisava que por condiçoes nas duas na mesma linha.

Ainda to apanhando sobre isso ... Seria basicamente o que voce me mandous ... porem com duas variaveis.

if [[ 1 =~ [1,2,3,4,5,6] ]] E [[ 2 =~ [1,2,3,4,5,6] ]]

Vou olhar os arrays e posto aqui depois o resultado

pmartelotta escreveu:
É verdade, pro que você quer, o post do djosino é ideal.

Sobre o "e" lógico, no link que mandei tem falando.

if [[ 1 =~ [1,2,3,4,5,6] && 2 =~ [1,2,3,4,5,6] ]]

Não entendi o porque do '&&' ter funcionado neste caso, ao invés do '-a'. Pois '&&' é um operador lógico global e o '-a' é o 'e' lógico do comando teste. Mas vou procurar saber. A princípio a linha que coloquei acima funciona.

Até mais.


Desse jeito ele funfa com && o que nao consigo fazer seria o contrario ...

Tipo Variavel 1 ter os numeros e a variavel 2 nao ter os numeros ..

if [[ 1 =~ [1,2,3,4,5,6] && 2 -ne [1,2,3,4,5,6] ]]

desse jeito nao funcionou.

O link eu estou lendo tambem e tentando entender .. o bom eh que cada post ou ajuda um aprendizado e conhecimento a mais .

Falando nisso. Obrigado pela força ..

Abraçao






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts