shell-script-pt
[Top][All Lists]
Advanced

[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 
>
>
>
>







reply via email to

[Prev in Thread] Current Thread [Next in Thread]