[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RES: Curiosidade sobre comando IF " disfarçado"
From: |
Rodolfo Villanova |
Subject: |
RES: Curiosidade sobre comando IF " disfarçado" |
Date: |
Fri, 23 Jun 2000 10:39:37 -0300 |
Ok, amigão.
Agradeço a atenção à questão abordada, porém creio que houve precipitação em
respondê-la.
Conheço bem como funciona a tabela verdade de sinais em portas lógicas.
Se o amigo conhece um pouco da linguagem C (sobre a qual foi programado o
próprio sistema operacional Unix e seus diversos sabores), deve com certeza
saber que o operador lógico "&&" tem precedência de execução em relação ao
operador lógico "||", não importando qual esteja mais à esquerda na linha de
comando.
Assim, o uso dos parênteses serve para alterar a precedência de avaliação
pelo compilador (da esquerda para a direita, mas as expressões com
operadores AND precedem as com operadores OR).
Por outro lado, se olharmos com maior atenção à questão abordada, veremos
(pelo menos me parece) que o shell (pelo menos nesse caso) subverte essa
ordem de avaliação de expressões lógicas, normalmente seguida na arquitetura
das linguagens computacionais.
Era somente essa a reflexão que desejei compartilhar com os leitores, mais
nada.
Também estou aqui para aprender e compartilhar o pouco que domino.
Ao referido amigo da lista que respondeu-me a questão informo que nos
ambientes Sun Solaris e HP-UX ainda não há uma versão do "Born Alive" Shell,
e que ainda não foi precisei realizar qualquer tipo de doação para
compreender algo.
Bom fim-de-semana a todos.
Rodolfo
> ----- Mensagem original -----
> De: Clovis Fabricio Costa [SMTP:address@hidden]
> Enviada em: Quinta-feira, 22 de Junho de 2000 13:18
> Para: address@hidden
> Assunto: Re: [shell-script] Curiosidade sobre comando IF "
> disfarçado"
>
> Rodolfo Villanova wrote:
> > Assim, como a questão que irei colocar não é particular, e aborda a
> forma
> > como o interpretador shell executa uma expressão lógica, segue o texto.
> > if [ \( $sexo -eq 1 -o $sexo -eq 2 \) -a \( $nome = Joao -o
> $nome = Maria \) ]
> > [ -d "$MeuDir" ] || mkdir $MeuDir && cd $MeuDir
> > Concordas com meu raciocínio?
> > Será isso uma incoerência do interpretador ou um equívoco de
> interpretação
> > (minha, não do shell...!) ?
>
> Bom. O comando if, executa o then se o resultado FOR ZERO, e executa o
> else SE FOR DIFERENTE DE ZERO.
> Por isso utilizamos o comando "test" ([) para fazer os testes dele. Este
> comando test (digite help test) pode ser abreviado como colchetes, e
> retorna 0 quanto é verdadeiro.
> Já a execução de programas com || e && é completamente diferente. Não
> tem comando test.
> Os operadores && e || são operadores para lista de comandos.
> O AND (&&) so eh verdadeiro se ambos forem verdadeiros, ou seja, se
> executar o primeiro e der falso (diferente de zero) ele nem executa o
> segundo.
> Ja o OR (||) so eh falso se ambos forem falsos, por isso, se o primeiro
> der verdadeiro (zero) ele nem executa o segundo.
> Estes operadores tem precedencia igual, ou seja, nao sao como os
> operadores -a e -o do comando test.
>
> Deu pra entender? Qq duvida pergunta ai (ou le o info bash) hehehe
>
> Clovis
[Non-text portions of this message have been removed]
- RES: Curiosidade sobre comando IF " disfarçado",
Rodolfo Villanova <=