Comando IF - Testa se variável existe [RESOLVIDO]

1. Comando IF - Testa se variável existe [RESOLVIDO]

Francisco Godoy Pereira
chicogodoy.evo

(usa CentOS)

Enviado em 14/12/2011 - 12:57h

Pessoal, tenho um probleminha no meu script que envolve o IF.

Segui todos os tutoriais encontrados e mesmo assim ele não funciona, deve ser algo implícito que não foi exposto nos artigos. Se puderem me ajudar, agradeço.

Segue abaixo o script.

if [ "$1" = "--help" ]; then

echo
"
Usage: comando [arg1] [arg2]

"
elif [ -n $1 ]; then
echo "A primeira variavel existe!"

else

echo "Caiu no ELSE"

fi


Traduzindo para o portugol:

Se eu digitar "comando --help" ele me mostra a mensagem de Help.
Se eu digitar um primeiro argumento diferente de --help "comando arg1" ele exibe "A primeira variavel existe".
Caso qualquer outra coisa ele exibe "Caiu no ELSE".

O que acontece é o seguinte, mesmo não passando qualquer argumento ele cai na segunda opção.

Alguma luz?


  


2. MELHOR RESPOSTA

Eduardo Treska
eduardotreska

(usa Ubuntu)

Enviado em 14/12/2011 - 13:33h

Cara, veja eu eu entendi direito:

Se voce digitar:
./nome --help
Ele deve cair no primeiro caso, certo?

Se voce digitar qualquer outra coisa diferente de --help, mas não pode ser um espaço vazio, ele deveria cair no segundo caso?

Se for vazio ele cai no terceiro?

Se for isso, eu testei aqui da seguinte forma:

if [ "$1" = "--help" ]; then

echo
"
Usage: comando [arg1] [arg2]

"
elif [ "$1" != '' ]; then
echo "A primeira variavel existe!"

else

echo "Caiu no ELSE"

fi

Se não for isso, vou ver sua resposta e tentar outra coisa
:D

3. Problema resolvido!

Francisco Godoy Pereira
chicogodoy.evo

(usa CentOS)

Enviado em 14/12/2011 - 15:21h

Eduardo Treska, o código ficou perfeito e você entendeu perfeitamente e minha necessidade, só um detalhe, executando esse código quando eu caio na condição do "--help" eu recebo um erro, que é o seguinte:

[[email protected] folder]# ./teste --help

./teste: line 7:
Usage: comando [arg1] [arg2]

: command not found

Mas já resolvi. Deve-se pegar as linhas:

###
echo
"
Usage: comando [arg1] [arg2]

"
###

e transformá-las em:

###
echo "Usage: comando [arg1] [arg2]"
###

Acho que é só questão de sintaxe mesmo.

O código em perfeito funcionamento fica da seguinte forma:

if [ "$1" = "--help" ]; then

echo "Usage: comando [arg1] [arg2]"

elif [ "$1" != '' ]; then

echo "A primeira variavel existe!"

else

echo "Caiu no ELSE"

fi

A partir dai é lapidar o código. Pretendo instituir uma segunda comparação da seguinte forma:

(...)
elif [ "$1" != '' ] && [ "$2" != '' ]; then
(...)

Acredito que dessa forma acima já funcione, mas ainda não testei.

Valeu! Meu problema foi resolvido! Muito obrigado pela atenção!




4. Re: Comando IF - Testa se variável existe [RESOLVIDO]

Eduardo Treska
eduardotreska

(usa Ubuntu)

Enviado em 14/12/2011 - 15:41h

É isso ai, o importante é que funcionou.

Você sacou o que fiz ali né mudando o -n para diferente de ''

Qualquer coisa estamos por aqui.


5. Re: Comando IF - Testa se variável existe [RESOLVIDO]

Francisco Godoy Pereira
chicogodoy.evo

(usa CentOS)

Enviado em 14/12/2011 - 16:02h

Sim, em PHP funciona desta forma, porém pesquisei em Shell Script Linux e encontrei alguns artigos mencionando a mesma coisa e com exemplos práticos, mas quando testo não funciona.

Exemplo 1:
elif [ -n "$1" ]; then

Exemplo 2:
elif [ -s "$1" ]; then

-s = Verifica se é nulo
-n = Verificar se é não nulo

Testei com os dois e recebo o mesmo resultado. Achei bem estranho não funcionar, pois existem referências boas para estes exemplos.

Mas dessa que você explicou funcionou, meu script está quase completo, agora falta 99%. haha..

Valeu a dica!


6. Re: Comando IF - Testa se variável existe [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 14/12/2011 - 16:45h



VARIAVEL=$1
if [ -n ${VARIAVEL} ]
echo 'nulo'
fi

if [ ! -n ${VARIAVEL} ]
echo 'não nulo'
fi





Dica:
Me pareceu que nesta solução foi utilizado um range n de opções certo? Caso sim acho que o mais indicado seria a utilização do bloco case esac com procedimentos/funções e para evitar redundâncias indico o uso de getopts.

Pesquise mais e boa sorte!


7. Re: Comando IF - Testa se variável existe [RESOLVIDO]

Francisco Godoy Pereira
chicogodoy.evo

(usa CentOS)

Enviado em 23/12/2011 - 11:59h

Obrigado pela dica Ronin, vou pesquisar a respeito.

Testei esse script que você passou, mas ele não funcionou, você pode por favor explicar o funcionamento?

Obrigado.


8. Re: Comando IF - Testa se variável existe [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/12/2011 - 03:02h

Pois é... Tá todo errado... Maldita racionamento elétrico. :D
Desculpe!

Segue um que funciona divinamente bem.



#!/bin/bash

VARIAVEL=$1

# Verifica se o comprimento da
# variável não é igual a zero
if [ ${#VARIAVEL} -ne 0 ]
then
echo 'não nulo'
else
echo 'nulo'
fi



Boa sorte!