[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Script dton erro
From: |
Geison Farias |
Subject: |
Re: [shell-script] Script dton erro |
Date: |
Tue, 20 May 2003 16:06:25 -0300 |
Blz Mateus,
Ate' ai eu sabia, e ate' retirei o zero da frente dos números.
Mas e porque que:
eletro [/home/geison] > echo $(( 01 + 07 ))
8
a soma eh em octal e a resposta foi em decimal... hummm
decinal e' o default (lógico) mas e se eu quizer o resultado em octal?
Geison
12/5/2003 11:01:20, "Mateus Caruccio" <address@hidden> escreveu:
> ola,
>
>o problema esta na base que voce utiliza para o numero 8:
>
>se for 08 o shell interpreta como base octal e como os numeros octais so vao
>de 0 ate 7 ocorre um erro
quando vc tenta forcar o numero 08 em octal. eh o mesmo que querer utilizar o
numero G em hexa, ou 3 em
binario, sacou ?? o numero esta fora do range aceitavel...
>por isso que "echo $((01 + 07))" e "echo $((01 + 8))" funcionam, mas "echo
>$((01 + 08))" nao funciona.
>
>em octal, 07 eh 7 em decimal, 01 eh 1 em decimal, etc...
>voce deve converter os numeros maiores que 07 (em octal) antes de realizar a
>soma... talvez com um sed,
sei la:
>
># echo "08" | sed -ne 's/[0]*\(.*\)/\1/p'
>8
>
>
>[]'s
>
> Mateus Caruccio
>
>----- Original Message -----
>From: Geison Farias <address@hidden>
>Date: Sat, 10 May 2003 11:23:35 -0300
>To: address@hidden
>Subject: [shell-script] Script dton erro
>
>>
>> Olá pessoal,
>>
>> Estão lembrados daque script do Júlio "dton"? tive um probleminha com
>> ele nos dias 08 e 09 que estava dando a seguinte mensagem de erro:
>>
>> para dias 08
>> ./dton.sh: 08: value too great for base (error token is "08")
>>
>> para dias 08
>> ./dton.sh: 09: value too great for base (error token is "09")
>>
>> Segue o script, mais abaixo, com um incremento para evitar o erro.
>>
>> No ksh acontece a mesma coisa ou eh so' no bash (linux)? Não tenho
>> o ksh aqui para testar.
>>
>> #!/bin/bash
>> #
>> # shell original !/bin/ksh
>> #
>> #======================================================================
>> # Calcula qtd dias entre uma data passada como parametro e 01/01/1980.
>> # Se nao for passado nenhum parametro a data de hoje sera assumida.
>> # Obs. Para executar este programa sob o sh, trocar os $((..)) por expr
>> #======================================================================
>> # Leia: Linux - Programacao Shell ISBN: 85-7452-048-9
>> # Autor: Julio Cezar Neves <mailto:julio.neves@b...>
>> #======================================================================
>> #
>> if [ $1 ]
>> then
>> DFim=`echo $1 | cut -f1 -d"/"`
>> MFim=`echo $1 | cut -f2 -d"/"`
>> AFim=`echo $1 | cut -f3 -d"/"`
>> else
>> DFim=`date +%d`
>> MFim=`date +%m`
>> AFim=`date +%Y`
>> fi
>> TotDias=$((1 + 365 * (AFim - 1980) + (AFim - 1980) / 4))
>> [ $((AFim % 4)) = 0 -a $MFim -le 2 ] && TotDias=$((TotDias - 1))
>> # modificado aqui por sugestao de verde6666
>> for i in `echo " 31 28 31 30 31 30 31 31 30 31 30 31" | cut -f-$MFim -d" "`
>> do
>> TotDias=$((TotDias + $i))
>> done
>>
>> # passou a dar este erro(*) no 08 e 09 e modifiquei para pegar o valor sem
>> # o zero na frente.
>> # (*) ./dton.sh: 08: value too great for base (error token is "08")
>>
>> CARACTER1=$( echo $DFim | cut -c1-1 )
>> [ "$CARACTER1" = "0" ] && DFim=$( echo $DFim | cut -c2-2 )
>>
>> echo $((TotDias + DFim))
>> # fim do script
>>
>>
>> Alguém refresca minha memória de como é o tratamento desta operações
>> abaixo?
>>
>> eletro [/home/geison] > echo $(( 01 + 07 ))
>> 8
>> eletro [/home/geison] > echo $(( 01 + 08 ))
>> bash: 01 + 08: value too great for base (error token is "08")
>> eletro [/home/geison] > echo $(( 01 + 8 ))
>> 9
>> eletro [/home/geison] > echo $(( 01 + 09 ))
>> bash: 01 + 09: value too great for base (error token is "09")
>> eletro [/home/geison] > echo $(( 01 + 9 ))
>> 10
>>
>> []' octais
>>
>> Geison Farias
>> Recife - PE
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> Esta lista não admite a abordagem de outras liguagens de programação, como
>> perl, C etc. Quem insistir
em não seguir esta regra será moderado sem prévio aviso.
>> ---------------------------------------------------------------------
>> Sair da lista: address@hidden
>> ---------------------------------------------------------------------
>> Esta lista é moderada de acordo com o previsto em
>> http://www.listasdiscussao.cjb.net
>> ---------------------------------------------------------------------
>>
>>
>> Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
>> http://br.yahoo.com/info/utos.html
>>
>>
>
>
>
># ########################################################
># Mateus de Oliveira Caruccio <caruccio at operamail.com>
># Linux User #183552 - UIN #37364320
># Vim, vi e matei o Emacs !
>
>
>
>
>--
>____________________________________________
>http://www.operamail.com
>Get OperaMail Premium today - USD 29.99/year
>
>
>Powered by Outblaze
>
>
>---------------------------------------------------------------------
>Esta lista não admite a abordagem de outras liguagens de programação, como
>perl, C etc. Quem insistir em
não seguir esta regra será moderado sem prévio aviso.
>---------------------------------------------------------------------
>Sair da lista: address@hidden
>---------------------------------------------------------------------
>Esta lista é moderada de acordo com o previsto em
>http://www.listasdiscussao.cjb.net
>---------------------------------------------------------------------
>
>
>Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
>http://br.yahoo.com/info/utos.html
>
>
>
>