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

[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]



reply via email to

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