Erro onde não tem erro [RESOLVIDO]

13. man ???

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 26/11/2009 - 08:37h

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

expr = Comando para realizar operações aritméticas, comparativas e de tratamento de strings. Mais informações:

man expr

> /dev/null 2>&1 = Redireciona tanto as saídas de erro quanto a padrão para o "buraco negro" (/dev/null) do sistema, evitando que a saída na sua tela fique "poluída". Nesse caso ela é necessária pelo fato do expr jogar tudo na tela do usuário. Mais detalhes:

man bash

Ah! caso o expr avalie como verdadeira a sentença, então seu código de retorno será igual a zero! caso contrário será diferente.


  


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

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 26/11/2009 - 18:35h

Valeu ricardo(dinho) !!!

coloquei no 4shared os scripts q eu fiz e umas pastas mantendo a extrutura dos diretorios q os scripts estão usando.

http://www.4shared.com/file/160465032/e3ddc8bf/_2__scripts.html


>> Talves vc ache meio não elegante a forma que eu escrevi os scripts ... porem na minha shell ignorancia não pude fazer melhor

Desde já agradeço pela ajuda

Caso possa me ajudar on-line o meu msn é lincolnsol@hotmail.com (sei q pedir pra vc me add no msn já é abusar do direito de abusar)


15. Agora é que eu não entendo mesmo

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 30/11/2009 - 14:46h

Bem amigos nos ultimos dias eu estive estudando o comando "expr" e me pareceu muito util

Porem estou com um problema serissimo !!!
----------[./teste.sh]---------
#!/bin/bash
var="93.0"
b=`expr $var \>= 850 `
echo "b = $b"
if [ $b = 1 ]; then
echo $var maior q 850
else
echo $var menor q 850
fi
--------------------------------
A resposta desse teste deveria ser q "93.0 é menor que 850", porem o esse teste retorna é :

------[bash -x ./teste.sh]------
$ bash -x ./teste.sh
+ read var
93.0
++ expr 93.0 '>=' 850
+ b=1
+ echo 'b = 1'
b = 1
+ '[' 1 = 1 ']'
+ echo 93.0 maior q 850
93.0 maior q 850
---------------------------
Como é possivel ?



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

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 30/11/2009 - 15:45h

Analizando com calma realmente o expr não se entende com operações em ponto flutuante! Então use o bom (excelente!) e velho bc.

echo "93.0 >= 850" | bc
0

echo "930 >= 850" | bc
1

Perceba que o bc devolve '0' para sentenças falsas e '1' para verdadeiras.

Mais detalhes: man bc

P.S.: se você utiliza-se o zsh ao invés do bash, nem precisaria de comandos externos para aritmética em ponto flutuante:

if (( 93.0 >= 850 ))
then
echo Maior
else
echo Menor
fi





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

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 30/11/2009 - 16:29h

incrivel como a substituição de #!/bin/bash por #!/bin/zsh mudou a estrutura do script... Valeu mesmo pela dica


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

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 01/12/2009 - 14:31h

Continuando na minha odisseia defazer esse troço funfar venho até vcs com mais um problema

Bem quando eu executo o script sozinho ele funciona.
Porem quando eu uso um outro script pra chamar ele dá erro

O comando q eu estou usando para chamar ele é "sh media.sh $lista" que me retorna a saida ""sh media.sh Alta_Floresta_2007_12_26_00Z.txt", fazendo assimele dá erro em todos os "if" dentro do script
ERRO:
media.sh: line 10: ((: >= 850 : syntax error: operand expected (error token is ">= 850 ")e isso se repete em todos os "if"

mas se ao invez de:
cat $1 |
while read linha; do

eu fizer
cat Alta_Floresta_2007_12_26_00Z.txt |
while read linha; do

ele funciona q é uma maravilha, porem eu tenho q fazer ele rodar em todos os arquivos do diretorio (+- uns 3000)

por favorcomo eui posso solucionar isso ???



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

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/12/2009 - 15:00h

mano, nao sei como esta o seu script agr

mas olhei o seu primeiro que vc nos passou, nao sei se funciona, mas axo que ficou mais bonito de programar, e em um arquivo soh

---------------------------------------------

#!/bin/bash

DIR=/home/Dados/Alta_Floresta/

F1() {

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 < "$lista"

}

cd $DIR #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
F1 #Chama função
done < vol.lista.temp #volta para o "lista" e recomeça o While

-------------------------------------------------------


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

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/12/2009 - 15:42h

tenta colocar disso

cat $1

para

cat "$1"


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

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 02/12/2009 - 16:31h

Venho até vcs novamente com mais um pedido

Novamente o meu script não funciona, eu adaptei a ideia do douglasfim, o que deixou o meu script assim:

"Eu estou executando ele por "sh ./teste.sh" senão dá erro de permissão

----[sh ./teste.sh]----
#!/bin/zsh

F1()
{
while read linha
do

var=`echo $linha | cut -d" " -f1 | egrep "^[0-9]"`
temp=`echo $linha | awk '{print $3}'`

if (( "$var" >= "850" )) && (( "$var" < "1000" ));then
echo $temp >> /home/Lincoln/Dados/Temp/tempN1.temp
fi

done < "$lista"
echo $1 FINALIZADO !!!
}

cd /home/Lincoln/Dados/Temp/Alta\ Floresta/
ls -l Alta_Floresta* | awk '{ print $NF }' > vol.lista.temp

while read lista
do
cd /home/Lincoln/Scripts/Faz\ Media/
F1
done < vol.lista.temp

echo FIM DO SCRIPT
--------------------

ele está dando erro no if do "F1" (syntax error in expression) e ( syntax error: invalid arithmetic operator)

será q alguem pode me dizer o q está dando errado ?
Pq existe uma variedade de erros q acontecem dependendo do que eu uso:
"if [ "$var" >= "850" ]" - "[: : unary operator expected"
"if (( "$var" >= "850" ))" - ": syntax error: operand expected (error token is ">= 850 ")"
"if ( "$var" -gt "850" )" - " : command not found"


"-gt" ou ">=" ou "if [ ]" ou "if (( ))" com aspas ou sem aspas,eu realmente estou ficando sem opções

desde já obrigado


22. Obrigado

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 02/12/2009 - 23:10h

Bem amigos doforum ... venho atravez deste agradeçer aos colegas que me ajudaram

Muitissimo obrigado a:
neliobjr
SMarcell
fdmarp
vfs
ricardo(dinho)
douglasfim

Pela ajuda que mederam

no final desta tarde eu consegui alcançar o meu objetivo com esse script





01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts