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: Elder Marco
Subject: Re: [shell-script] Problema com o if
Date: Wed, 7 Jan 2009 22:15:27 -0200

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

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



reply via email to

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