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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] duvida com if e operador ||


From: Guilherme Gall
Subject: Re: [shell-script] duvida com if e operador ||
Date: Mon, 25 May 2015 15:36:38 -0300

Oi Fábio,

Não entendi muito bem a sua dúvida. O shell, quando encontra uma lista
de comandos no formato

comando1 || comando2

executa comando2 só se comando1 terminar com um exit status diferente de zero.

Seu 1º teste terminará com exit status diferente de 0, porque o teste dá falso:

$ echo $vdata
Mon
$ [ $vdata != "Mon" ]; echo $?
1

Como seu 1º teste terminou com 1, ele passa para o 2º. Esse seria o
comando2 da lista.

$ [ $vdata != "Sun" ]; echo $?
0

Como "Mon" é diferente de "Sun", o teste dá verdadeiro e o exit status é 0.

Se você ler o man bash na seção "Lists", vai ver que a última frase é
a seguinte: "The return status of AND and OR lists is the exit status
of the last command executed in the list." O if, portanto, tem que
executar o bloco com 'echo "Nao eh o dia correto"'.

Atenciosamente,

Guilherme Gall

Em 25 de maio de 2015 14:39, address@hidden [shell-script]
<address@hidden> escreveu:
>
>
>
> Pessoal, boa tarde.
>
>
>
> Gostaria de ajuda quanto ao tópico abaixo:
>
> Estou testando a condição de uma variável utilizando o Operador || (OU) da 
> seguinte forma:
>
> $date "+%a" # O comando date retornando o valor da Semana. Neste caso, estou 
> considerando a data do Dia sendo segunda feira
>
> Mon
>
>
> $vdata=`date "+%a"` # A variável  "$vdata" está carregando o valor do comando 
> Date
>
> # Ao testar a variável, com a condição de que Se $vdata é difente de "Mon" ou 
> $vdata é diferente de "Sun", retorna a mensagem "Nao eh dia correto", se não 
> "Eh o dia correto"
>
>
> Na pagina 197 de Programação Shell Linux, 09º ed, a explicação é:
>
> "
>
> 11 (or ou ou lógico)
>
> De acordo com a "Tabela Verdade", para que um teste tipo <condl > ou
>
> <cond2> seja verdadeiro, é necessário que qualquer uma das condições seja
>
> verdadeira. Assim, se <condl> for verdadeira, <cond2> não será executada,
>
> pois certamente o resultado final será verdadeiro "
>
>
> Considerando que a data é igual a "Mon", o Shell deveria considerar o 
> primeiro Teste do IF, validando o resultado como Eh o dia correto e 
> encerrando o Teste. Porém não é isto que ocorre.
>
>
> Aparentemente o Shell testa as duas condições Juntas e retorna o resultado:
>
> if [ $vdata != "Mon" ] || [ $vdata != "Sun" ];
>
>  then
>
>    echo "Nao eh dia correto"
>
>   else
>
>    echo "Eh o dia correto"
>
>  fi
>
> Nao eh dia correto
>


reply via email to

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