Problema ao usar o if [RESOLVIDO]

1. Problema ao usar o if [RESOLVIDO]

lucas
1lucas1

(usa Linux Mint)

Enviado em 28/11/2017 - 08:28h

não estou conseguindo usar o if com operadores logicos


if [$2 = help];then
echo -e "\nTipos { gcc, latex }"
echo -e "$0 'Arquivo' 'Tipo'"
else
if [$# -eq 1];then
if [$1 = help]; then
echo -e "\nTipos { gcc, latex }"
echo -e "$0 'Arquivo' 'Tipo'"
fi
fi
fi


tambem tentei fazer desta maneira


if [[$2 == help ] || [[$# == 1] && [$2 == help ] ]]; then
echo -e "$0 'Arquivo' 'Tipo'"
echo -e "\nTipos { gcc, latex }"
fi

Quando eu uso apenas uma verificação funciona mas quando tento usar
and &&
ou
or ||
da erro de sintaxi


  


2. Re: Problema ao usar o if [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 28/11/2017 - 09:40h

1lucas1 escreveu:

não estou conseguindo usar o if com operadores logicos


if [$2 = help];then
echo -e "\nTipos { gcc, latex }"
echo -e "$0 'Arquivo' 'Tipo'"
else
if [$# -eq 1];then
if [$1 = help]; then
echo -e "\nTipos { gcc, latex }"
echo -e "$0 'Arquivo' 'Tipo'"
fi
fi
fi


tambem tentei fazer desta maneira


if [[$2 == help ] || [[$# == 1] && [$2 == help ] ]]; then
echo -e "$0 'Arquivo' 'Tipo'"
echo -e "\nTipos { gcc, latex }"
fi

Quando eu uso apenas uma verificação funciona mas quando tento usar
and &&
ou
or ||
da erro de sintaxi


Bom dia.
Falta espaçamento entre os colchetes.
Exemplo:
[ $# -eq 2 ] && echo " Dois argumentos"

Att.
Marcelo Oliver


3. Re: Problema ao usar o if

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 28/11/2017 - 11:27h

Oi.

Outra possibilidade é usar os operadores -a( and ) e -o( or ) do comando test, fica assim:


paulo@notebook:~$ i=0
paulo@notebook:~$ j=1
paulo@notebook:~$ if [ $i -eq 0 -a $j -eq 0 ] ; then echo ok; fi
paulo@notebook:~$ if [ $i -eq 0 -a $j -eq 1 ] ; then echo ok; fi
ok
paulo@notebook:~$



Linux Professional Institute - LPIC-1
Novell Certified Linux Administrator - CLA
Oracle Certified Associate, Java SE Programmer - OCA

http://twitter.com/p4ulodi4s
http://www.prminformatica.com.br/


4. :/

lucas
1lucas1

(usa Linux Mint)

Enviado em 29/11/2017 - 12:29h

não funcionou trocar por
= -eq && -a || -o


e a do espaçamento tbm não funcionou

if [ [ $2 == help ] || [ [ $# == 1 ] && [ $2 == help ] ] ]; then
echo -e "$0 'Arquivo' 'Tipo'"
echo -e "\nTipos { gcc, latex }"
fi


esta dando o seguinte erro

lucas@Developer ~/Área de Trabalho $ ./a.sh help help
./a.sh: line 1: [: número excessivo de argumentos
./a.sh: line 1: [: número excessivo de argumentos



5. Re: Problema ao usar o if [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 29/11/2017 - 12:47h

EX:
#!/bin/bash
read palavra
if [ $palavra == help ] || [ $palavra == he ] || [ $palavra == hel ] ; then
echo "Valido $palavra"
else
echo echo "Invalido $palavra"
fi


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



6. Re: Problema ao usar o if [RESOLVIDO]

lucas
1lucas1

(usa Linux Mint)

Enviado em 29/11/2017 - 13:09h

Mauriciodez escreveu:

EX:
#!/bin/bash
read palavra
if [ $palavra == help ] || [ $palavra == he ] || [ $palavra == hel ] ; then
echo "Valido $palavra"
else
echo echo "Invalido $palavra"
fi


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------




no caso seria (compara uma palavra OU (Compara um numero E Compara uma palavra)

continua dando o erro


lucas@Developer ~/Área de Trabalho $ ./a.sh help help
./a.sh: line 1: [: número excessivo de argumentos
./a.sh: line 1: [: número excessivo de argumentos





7. Re: Problema ao usar o if

Paulo Dias
di4s

(usa XUbuntu)

Enviado em 29/11/2017 - 13:31h

1lucas1 escreveu:

não funcionou trocar por
= -eq && -a || -o


e a do espaçamento tbm não funcionou

if [ [ $2 == help ] || [ [ $# == 1 ] && [ $2 == help ] ] ]; then
echo -e "$0 'Arquivo' 'Tipo'"
echo -e "\nTipos { gcc, latex }"
fi


esta dando o seguinte erro

lucas@Developer ~/Área de Trabalho $ ./a.sh help help
./a.sh: line 1: [: número excessivo de argumentos
./a.sh: line 1: [: número excessivo de argumentos


Oi.

Poste como ficou usando os operadores que mostrei ...

Uma coisa importante é que existem operadores de comparação diferentes para inteiros e strings. Por exemplo, para comparar se 2 valores são strings iguais, use = . Para comparar se 2 valores são inteiros iguais, use -eq

Veja esse artigo na parte sobre operadores: https://www.vivaolinux.com.br/artigo/Programacao-com-Shell-Script?pagina=2

Linux Professional Institute - LPIC-1
Novell Certified Linux Administrator - CLA
Oracle Certified Associate, Java SE Programmer - OCA

http://twitter.com/p4ulodi4s
http://www.prminformatica.com.br/


8. O problema está no test

Claiton B. G.
cbgprog

(usa Ubuntu)

Enviado em 29/11/2017 - 13:38h

Olá!

Tem alguns detalhes para analisar:

A instrução test ou [ ] (são a mesma coisa) usa o operador -eq para testar igualdade em comparações numéricas e o operador = para testar igualdades em strings. E strings devem ficar entre aspas.

Portanto devemos usar $# -eq 1 pois o numero de argumentos na linha de comando é um valor numérico. Já para o caso do help devemos usar $2 = "help" entre aspas, pois help é uma string de caracteres.

Lembrando que seu script assume que o usuário sempre vai digitar pelo menos dois parâmetros na linha de comando. Caso o usuário digite menos (um ou nenhum) vai dar o erro:

linha 3: [: =: esperado operador unário 


Ficou assim:

#!/bin/bash

if [ $2 = "help" ] || [ $# -eq 1 ] && [ $2 = "help" ] ; then
echo -e "$0 'Arquivo' 'Tipo'"
echo -e "\nTipos { gcc, latex }"
fi


Uma boa fonte que pode ser útil é o Canivete Suíço do Shell do grande Aurelio Marinho Jargas que você pode acessar neste endereço: http://aurelio.net/shell/canivete/ , o capitulo 7 tem a tabela da opções do comando [


9. Re: Problema ao usar o if

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 29/11/2017 - 13:50h

1lucas1 escreveu:

não estou conseguindo usar o if com operadores logicos


if [$2 = help];then
echo -e "\nTipos { gcc, latex }"
echo -e "$0 'Arquivo' 'Tipo'"
else
if [$# -eq 1];then
if [$1 = help]; then
echo -e "\nTipos { gcc, latex }"
echo -e "$0 'Arquivo' 'Tipo'"
fi
fi
fi


tambem tentei fazer desta maneira


if [[$2 == help ] || [[$# == 1] && [$2 == help ] ]]; then
echo -e "$0 'Arquivo' 'Tipo'"
echo -e "\nTipos { gcc, latex }"
fi

Quando eu uso apenas uma verificação funciona mas quando tento usar
and &&
ou
or ||
da erro de sintaxi


veja bem essa sua estrutura ... se variavel 2 for igual e help ... vc repete ela no segundo parametro e não precisa ... pois se ela não for help na primeira obviamente q tb não vai ser help na 2ª !!

entendeu o q eu quis explicar ???

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



10. Re: Problema ao usar o if [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 29/11/2017 - 14:57h

veja esse exemplo

#!/bin/bash

echo "Escreva uma palavra"
read palavra
echo "Escreva outra palavra"
read palavra1
echo "Escreva um numero"
read numero

if [[ ( $palavra == uma ) || ( $palavra1 == outra ) && ( $numero -eq 1 ) ]] ; then
echo "Satisfaction"
else
echo "Not Satisfaction"
fi


Verifica se a variável "palavra" é igual a "uma" OU verifica se "palavra1" = outra & "numero" = 1 !!!!


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



11. passei a semantica errada

lucas
1lucas1

(usa Linux Mint)

Enviado em 29/11/2017 - 19:06h

Mauriciodez escreveu:

1lucas1 escreveu:

não estou conseguindo usar o if com operadores logicos


if [$2 = help];then
echo -e "\nTipos { gcc, latex }"
echo -e "$0 'Arquivo' 'Tipo'"
else
if [$# -eq 1];then
if [$1 = help]; then
echo -e "\nTipos { gcc, latex }"
echo -e "$0 'Arquivo' 'Tipo'"
fi
fi
fi


tambem tentei fazer desta maneira


if [[$2 == help ] || [[$# == 1] && [$2 == help ] ]]; then
echo -e "$0 'Arquivo' 'Tipo'"
echo -e "\nTipos { gcc, latex }"
fi

Quando eu uso apenas uma verificação funciona mas quando tento usar
and &&
ou
or ||
da erro de sintaxi


veja bem essa sua estrutura ... se variavel 2 for igual e help ... vc repete ela no segundo parametro e não precisa ... pois se ela não for help na primeira obviamente q tb não vai ser help na 2ª !!

entendeu o q eu quis explicar ???

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------


eu no segundo $2 seria $1





if [ [$2 == "help" ] -o [ [$# -eq 1] -a [$1 == "help" ] ] ]; then
echo -e "$0 'Arquivo' 'Tipo'"
echo -e "\nTipos { gcc, latex }"
fi



12. Re: Problema ao usar o if [RESOLVIDO]

lucas
1lucas1

(usa Linux Mint)

Enviado em 29/11/2017 - 19:10h

p4ulodi4s escreveu:
Oi.

Poste como ficou usando os operadores que mostrei ...

Uma coisa importante é que existem operadores de comparação diferentes para inteiros e strings. Por exemplo, para comparar se 2 valores são strings iguais, use = . Para comparar se 2 valores são inteiros iguais, use -eq





if [ [$2 = "help" ] -o [ [$# -eq 1] -a [$1 = "help" ] ] ]; then
echo "$0 'Arquivo' 'Tipo'"
echo -e "\nTipos { gcc, latex }"
fi



saida terminal é

lucas@Developer ~/Área de Trabalho $ ./a.sh help help
./a.sh: line 1: [: número excessivo de argumentos





01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts