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

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

Re: [shell-script] Problema com o if


From: Julio C. Neves
Subject: Re: [shell-script] Problema com o if
Date: Wed, 7 Jan 2009 23:18:37 -0200

Explicação:
sintaxe do cmd test:

[ condição1 -o condição2 ]

como o if testa o código de retorno ($?) do test, desta forma ele
funcionará.

Forma errada:

if [ condição1 ] || [ condição2 ]

o if testará o retorno de condição1 e condição2 (desatrelada do if) será
executada caso condição1 seja falsa.

Outra forma de fazer (mais rápida), porém com operadores diferentes.

if [[ condição1 || condição2 ]]

veja detalhes na matéria que começa
aqui<http://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo003#O_Comando_if>,
termina 
aqui<http://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo004#O_Comando_test>e
mostra a sintaxe dotest sob
o bash 3.0 
aqui<http://wiki.softwarelivre.org/TWikiBar/TWikiBarBirinaite#Testes_usando_express_es_regular>
.
-- 
Abração,
Julio
*Cursos de Shell e Zenity nos finais de semana:
- Em SP ligue (11) 2125-4747;
- Em DF ligue (61) 3223-3000;
- Turmas fechadas em outras cidades ligue (21) 8112-9988*

2009/1/7 Elder Marco <address@hidden>

>   >oi galera, tudo bem?
> >Preciso de uma ajudinha da galera, se for possivel.
> >Desde já agradeço pela atenção.
> >É o seguinte tenho o seguinte script, ex:
> >
> >#!/bin/sh
> >
> >if [ ! -e "/home/$1" ] || [ ! -d "/home/$1" ]; then
> >echo "O arquivo/diretorio nao existe"
> >else
> >echo "O arquivo/diretorio existe"
> >fi
> ---------------
> Se você executar
>
> $ bash -x ./seu_script.sh <algum_parâmetro>
>
> Você verá que o bash faz executa apenas o primeiro test. se for bem
> sucedido
> nele (isso ocorre se o arquivo não existir, pois ! FALSE = TRUE ). Se ele
> encontrar o arquivo a opção "!" irá inverter a situação e fará com que o
> test seja "mal sucedido" ( !TRUE = FALSE ) e então irá executar o segundo
> test devido ao operador "||" e se encontrar o diretório, o outro "!" irá
> fazer com que ele também seja "mal sucedido". No final, operador teríamos
> algo assim:
>
> FALSE || FALSE
>
> Que daria FALSE e o else seria executado dizendo que o diretório/arquivo
> existe. Agora perceba que se qualquer um dos "test's" não encontrar o
> arquivo ou diretório, teremos um FALSE e depois !FALSE = TRUE o que faria
> com que a expressão acima inteira fosse TRUE e o que estivesse abaixo do if
> seria executado:
>
> TRUE || FALSE = TRUE
> FALSE || TRUE = TRUE
>
> Assim sendo, não vi nenhum erro no seu script, eu testei aqui e deu tudo
> certo comigo.para ver se sele ac mas eu achei ele um pouco confuso. Acho
> que
> eu eu faria assim:
>
> ------------------------
> #!/bin/sh
>
> if [ -e /home/$1 -o -d /home/$1 ]; then
> echo "Arquivo/diretório existe."
> else
> echo "Arquivo/diretório não existe."
> fi
> --------------------------
>
> Mas é só uma sugestão :-)
>
> 2009/1/7 edmarssouza <address@hidden<edmarssouza%40yahoo.com.br>
> >
>
> > oi galera, tudo bem?
> > Preciso de uma ajudinha da galera, se for possivel.
> > Desde já agradeço pela atenção.
> > É o seguinte tenho o seguinte script, ex:
> >
> > #!/bin/sh
> >
> > if [ ! -e "/home/$1" ] || [ ! -d "/home/$1" ]; then
> > echo "O arquivo/diretorio nao existe"
> > else
> > echo "O arquivo/diretorio existe"
> > fi
> >
>
> >
> > A intenção é: se o arquivo/diretorio que o usuário digitar na linha
> > de comando,
> > existir no diretorio /home, retorne a mensagem que o arquivo existe,
> > senão retorne
> > a mensagem que não existe o arquivo ou diretorio. O problema é que em
> > vez de
> > retorna como explicado acima, sempre retorna "O arquivo/diretorio não
> > existe".
> > Mesmo o arquivo/diretorio existindo. Se alguém poder ajuda eu
> > agradeço.
> > Queria tbm saber da galera quando é preciso usar o "[[" em vez de "["?
> > Valeu galera, até mais.
> >
> >
> >
>
> --
> Elder Marco
>
> Linux User: #471180
>
> "O conhecimento é tristeza: aqueles que mais sabem são os que mais
> profundamente devem lamentar a mais fatal verdade, a árvore do conhecimento
> não é a da vida." (Versos extraídos da tragédia Manfred, de Byron e citado
> por Nietzsche em "Humano, demasiado humano")
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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