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