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