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