Erro onde não tem erro [RESOLVIDO]

1. Erro onde não tem erro [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 19/11/2009 - 19:18h

estou executando um script ... para min está correto, porem para o bash não está.

estou usando um "while read $linha" e dentro desse "while" um "if", na minha shell ignorancia está tudo certo porem quando executo sempre dá erro

######[CODIGO]######
arquivo_de_entrada="$1"
while read linha
do
controle=`echo $linha | cut -d" " -f1`
if [ $controle >= 850 ]
then
echo $linha | awk -F '{print$3}' >> tempN1.temp
fi
done < "$arquivo_de_entrada"
#####################
se eu usar >= como operador logico do "if" dá o seguinte erro
"unary operator expected"

e se eu usar -ge como operador logico do "if" dá o seguinte erro
"integer expression expected"

de qualquer forma eu não estou conseguindo fazer e peço encarecidamente pela ajuda de vcs


  


2. Re: Erro onde não tem erro [RESOLVIDO]

nelio
neliobjr

(usa Red Hat)

Enviado em 19/11/2009 - 20:57h

Opa, amigo, não entendi o que vc quis fazer, do while para frente ta beleza, até a entrada que vc redireciona no done.

eu conheço a seguinte extrutura.

cat arquivo_entrada | while read linha
do
#comandos
done;



3. Simples!

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 20/11/2009 - 00:55h

Rode seu script em modo debug 'bash -x script' e veja o que esta acontecendo.


4. Re: Erro onde não tem erro [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 20/11/2009 - 11:26h

concordo, mas o que mais parece é que no seu arquivo de entrada os números não são números. Executa com -x e qq coisa posta ai.


5. Re: Erro onde não tem erro [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/11/2009 - 14:01h

facil debugar isso:

{{{
arquivo_de_entrada="$1"
while read linha
do
controle=`echo $linha | cut -d" " -f1`
# debug
echo $controle
# pressione enter pra continuar
read
if [ $controle >= 850 ]
then
echo $linha | awk -F '{print$3}' >> tempN1.temp
fi
done < "$arquivo_de_entrada"
}}}

creio q precise colocar aspas na variavel, aias, q tipo de dados vc pretende ler? acho q o cut faria o mesmo q o awk ai nao?

mostra um trecho do arquivo e entrada


6. Re: Erro onde não tem erro [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 24/11/2009 - 11:05h

Desculpe pela demora pra responder ... é q eu tive problemas com a internet.

vou colocar os scripts e comentar eles, acredito q dessa forma fica mais facil de vcs entenderem o meu problema e me ajudar:

------[PASSO1.sh]------
#!/bin/bash
cd /home/Dados/Alta_Floresta/ #encaminha oscript para o diretorio onde estão os arquivos txt

ls -l Alta_Floresta* | awk '{ print $NF }' > vol.lista.temp # cria uma lista com o nome de todos os arquivos de interesse dentro do diretorio

while read lista # Chama o arquivo "lista" q foi criado e o usa como parametro para o While
do
cd /home/Scripts/ # navega para o diretorio onde ficam os scripts
sh PASSO2.sh $lista # executa o PASSO2.sh com os valores do "lista"
done < vol.lista.temp #volta para o "lista" e recomeça o While
-----------------------
------[PASSO2.sh]------
#!/bin/bash
arq_de_entrada="$1" # arquivo de entrada para o script
cd /home/Dados/Alta_Floresta/ # navega para o diretorio onde ficam os dados

while read linha # abre o arquivo lendo linha por linha
do
controle=`echo $linha | cut -d" " -f1` # cria a variavel "controle" com o 1° valor da linha
if [ $controle >= 850 ] # compara se a variavel "controle" está dentro de um intevalo desejado
then
echo $linha | awk -F '{print$3}' >> tempN1.temp # salva em um arquivo "tempN1.txt" o 3° caracter da linha
fi
done < "$arquivo_de_entrada"
------------------
arquivo de teste : http://www.4shared.com/file/158736988/e8cd851/Alta_Floresta_2007_12_26_00Z.html


Porem quando eu executo os scripts eles não funcionam, sempre dá erro no IF do PASSO2.sh,
eu já mudei os operadores logicos do IF,já tentei com aspas e sem aspas ...

eu realmentejá não sei mais o q fazer ... será q tem algo a ver com o uso do cut ou do awk ?



7. Re: Erro onde não tem erro [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 24/11/2009 - 14:31h

Eu mudei o "controle", porem continua dando erro, sempre q eu executo da forma q está abaixo, deveria aparecer na tela apenas os valores maiores que 850.

Porem aparecem todos.

-------------------
while read linha
do
controle=$(cut -d" " -f1)
if [ "$controle" -gt "845" ]; then
echo $controle

fi
done < $1


8. Re: Erro onde não tem erro [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 25/11/2009 - 01:48h

Encontrei o meu problema !!!

No PASSO2.sh estou fazendo comparações de numeros decimais com numeros inteiros

"if [ $controle >= 850 ]"

A variavel "controle" sempre assume numeros decimais(1000.0 975.0 950.0 925.0 900.0 850.0 ...)

Já dei uma googada e ainda não achei nada sobre comparação condicional de numeros decimais com não-decimais.

A confirmação do meu pro está nesse exemplo:

-----[teste.sh]-----
#!/bin/bash
A=101.0
B=100
if [ "$A" -gt "$B" ]; then
echo $A Maior que $B
fi
--------------------
se eu executo esse teste.sh em com o "bash -x" dá a seguinte saida

$ bash -x ./teste.sh
+ A=101.0
+ B=100
+ '[' 101.0 -gt 100 ']'
./teste.sh: line 4: [: 101.0: integer expression expected



9. Re: Erro onde não tem erro [RESOLVIDO]

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 25/11/2009 - 09:55h

Use o expr para fazer as comparações e pegue seu código de retorno.

#!/bin/bash
A=101.0
B=100

expr $A \> $B > /dev/null 2>&1

if [ $? -eq 0 ]; then
echo $A Maior que $B
else
echo $A Menor que $B
fi


10. Re: Erro onde não tem erro [RESOLVIDO]

Magno Lima
magnolinux

(usa Debian)

Enviado em 25/11/2009 - 11:51h

um erro aonde nao tem erro, mais existe um erro mais que nao ta errado....

vc foi ninja nessa;;


Flw...



11. Re: Erro onde não tem erro [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 25/11/2009 - 17:43h

Valeu pela dica Sandro Marcell

Mas broter vc poderia explicar melhor como funcina esse modo "expr", pq teve umas linha ai q eu num intendi nada.

tipo a "expr $A \> $B > /dev/null 2>&1"


12. Erro onde não tem erro

Ricardo Cardoso
Ricardo Cardoso

(usa Debian)

Enviado em 25/11/2009 - 17:54h

fala ae amigão.

me manda o script completo para que eu possa ver o q deve estar acontecendo. creiio que o erro está no início da condição while acho que vc deveria colocar a linha que lê a variável fora da condiçao mas queria ver o script para poder mudar ele aqui e testar antes de te responder.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts