Dúvida transformar string em integer

1. Dúvida transformar string em integer

Joao Vitorino
Joao_Vitorino

(usa Red Hat)

Enviado em 20/04/2010 - 18:12h

Boa noite a todos!

Tenho um script que lê dados de vários arquivos, só que depois tenho que transformar esses dados em integer para poder trabalhar com ele.
Como transformo eses dados em integer.
Já tentei typeset -i mas não funcionou.

Segue o script


#!/bin/bash

dtbase=`head arquivo1* |grep "DATA BASE" |cut -c30-31`
rdz="001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023"
valor=300
for a in $rdz
do
perc=`cat rdz$dtbase$a.exp |cut -c573-578`
typeset -i perc
if [ $perc -le $valor ]
then
echo rdz$dtbase$a.exp porcentagem e $perc BAIXA
fi
done

O problema maior, creio eu, é que a variavel $perc que recebe os dados que preciso transformar em integer tem valores com cinco caracteres (ex: o número 1234 fica da forma "01234" ou algo do tipo "123" fica "00123")
Ai quando coloco o if e pergunto se "00123" é menor ou igual a "300", ele não consegue me dar uma resposta. Creio que esse seja o problema.
Se alguém puder me ajudar ficaria muito grato

Prometo que depois dessa, largo Redes e volto minha carreira para a área de desnvolvimento (RSRS)




  


2. Re: Dúvida transformar string em integer

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/04/2010 - 19:13h

cara, nao tenho muito tempo agr p fazer o script pois ja vou sair

mas vc pode fazer uma verificação de quantidade de caracteres

ex:

[root@CASA /usr/ports/math/gmp]# echo "teste" | wc -L | awk '{print $1}'
5
[root@CASA /usr/ports/math/gmp]# echo "123456789" | wc -L | awk '{print $1}'
9

ai vc pode fazer um calculo, para ver quantos caracteres faltam pra chegar ateh X caracteres

ex:
[root@CASA /usr/ports/math/gmp]# a=`echo "123" | wc -L | awk '{print $1}'` ; echo $((5-a))
2


ai vc pode pegar esse resultado e colocar em limites de loop, e cada loop concatena 0 a esquerda do numero


3. Re: Dúvida transformar string em integer

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/04/2010 - 19:30h

consegui cara

aki o codigo:

a=123 ; b=`echo "$a" | wc -L | awk '{print $1}'` ; while [ $b != 5 ]; do b=$((b+1)) ; a=0$a ;done ; echo "$a"| sed 's/ //g'

e aki alguns exemplos na pratica

[root@CASA /usr/ports/math/gmp]# a=1234 ; b=`echo "$a" | wc -L | awk '{print $1}'` ; while [ $b != 5 ]; do b=$((b+1)) ; a=0$a ;done ; echo "$a"| sed 's/ //g'
01234
[root@CASA /usr/ports/math/gmp]# a=123 ; b=`echo "$a" | wc -L | awk '{print $1}'` ; while [ $b != 5 ]; do b=$((b+1)) ; a=0$a ;done ; echo "$a"| sed 's/ //g'
00123

====================================

agr eh soh colocar a variavel com o resultado na variavel "a"


4. Re: Dúvida transformar string em integer

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 20/04/2010 - 20:39h



tenta isso

perc=`echo $perc | sed 's/^0*//'`




5. Re: Dúvida transformar string em integer

Perfil removido
removido

(usa Nenhuma)

Enviado em 21/04/2010 - 03:13h

_cut_zero(){

# Função: Retira zeros a esquerda
# do parâmetro fornecido

CUTZR=$1

# Primeiro caractere
PRCRT=$(echo $CUTZR | cut -c 1)

# Do segundo caractere em diante
RESTO=$(echo $CUTZR | cut -c 2-)

# SE:
# - o comprimento do parâmetro é maior que zero
# - o parâmetro fornecido é igual a zero
#
# ENTÃO:
# - chame novamente ESTA MESMA FUNÇÃO (recursividade)
# tendo como NOVO parâmetro
# o parâmetro ANTERIORMENTE FORNECIDO
# menos o seu primeiro caractere
#
# SENÃO:
# - escreva o parâmetro que foi fornecido a esta função

if [ ${#CUTZR} -gt 0 \
-a $PRCRT -eq 0 \
]; then

_cut_zero $RESTO
else
echo $CUTZR
fi

}



6. Re: Dúvida transformar string em integer

Joao Vitorino
Joao_Vitorino

(usa Red Hat)

Enviado em 21/04/2010 - 13:57h

Ronin.
Obrigado pela ajuda, mas ainda engatinho em shell script, por isso não sei muito bem como aproveitar essa função no script que criei.
Fdmarp.
Testei com o sed, funcionou numa boa quando faço em linha de comando.
Porém guando rodo o shell ainda sai com erro.
A saída do shell é a seguinte
***************************************************************
cat: rdz20001.exp: Arquivo ou diretório não encontrado
/files/cpd/shell/percmfd: line 11: [: -le: unary operator expected
cat: rdz20006.exp: Arquivo ou diretório não encontrado
rdz20006.exp porcentagem e 0 BAIXA
***************************************************************
E mais uma coisa. tem como colocar o shell para não exibir mensagem de erro quando o arquivo não é encontrado?



7. Re: Dúvida transformar string em integer

Perfil removido
removido

(usa Nenhuma)

Enviado em 21/04/2010 - 17:28h

vc pode fazer a verificação da existencia de um arquivo

ex:

verifica se o arquivo eh nulo, caso for exibira a mensagem

if [ -z ~/arquivo ]; then
echo "o arquivo nao existe"
fi



8. Re: Dúvida transformar string em integer

Perfil removido
removido

(usa Nenhuma)

Enviado em 21/04/2010 - 17:29h

eu lembro que tinha uma opção que era o contrario o -z mas nao estou muito lembrado, se nao me engano era -x

ai ele verifica se o arquivo for verdadeiro, que eh o contrario que o -z faz, que verifica se o arquivo eh nulo


9. Re: Dúvida transformar string em integer

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/04/2010 - 13:42h


if [ -e arquivo ]; then
echo 'O arquivo existe';
else
echo 'O arquivo não existe'
fi


Enquanto a função, meu camarada, basta copiá-la e colá-la para dentro de seu código (recomendo no inicio - depois de #!/bin/bash) e chama-la como um comando pelo seu nome onde você quiser. Seu código vai ficar mais ou menos assim:

#!/bin/bash

_cut_zero(){

bla.. bla... bla
bla.. bla... bla
}

_cut_zero $var

Experimente :)




10. Re: Dúvida transformar string em integer

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/04/2010 - 15:35h

pods cre, acho que o -x seria para verificar se o arquivo eh executavel xD




11. Re: Dúvida transformar string em integer

Rodrigo Chaves
stilldre

(usa Funtoo)

Enviado em 22/04/2010 - 15:56h

Só ninja!


isso=14
aquilo=16

#Compara string:
if [ $isso == $aquilo ]
then
fi

#Compara inteiro:
if [ $isso -eq $aquilo ]
then
fi

#Compara tamanho
if [ $isso -gt $aquilo ]
then
fi






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts