Onde está o erro ??? [RESOLVIDO]

1. Onde está o erro ??? [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 28/01/2019 - 14:15h

Pessoas ... estou quebrando a cabeça para descobrir e não consigo
o script abaixo é executado com o comando
watch -n 1 ./script.sh 


só que ele está dando erro nos segundos 38 e 39 >> http://ap.imagensbrasil.org/image/qWHN08

se eu tirar o 30 na variável INI da equação aí da erro nos segundos 08 e 09

#!/bin/bash

INI=`echo $(( $(who -b | awk '{ print $NF }' | awk -F':' '{print $1}') * 3600 + $(who -b | awk -F':' '{ print $NF }' ) * 60 + 30 ))`

FIN=`echo $(( $(date +%H) * 3600 + $(date +%M) * 60 + $(date +%S) ))`


HF=`echo $(( $(( $FIN - $INI )) / 3600 ))`
MF=`echo $(( $(( $(( $FIN - $INI )) - $HF * 3600 )) / 60 ))`
SF=`echo $(( $(( $FIN - $INI )) - $HF * 3600 - $MF * 60))`

if [ $HF -lt 10 ];then
HF=$(echo "0$HF")
fi

if [ $MF -lt 10 ];then
MF=$(echo "0$MF")
fi

if [ $SF -lt 10 ];then
SF=$(echo "0$SF")
fi

echo "$HF:$MF:$SF"



  


2. MELHOR RESPOSTA

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 28/01/2019 - 19:38h

É aquele velho probleminha do bash interpretar os zeros iniciais como octal (00 - 07). Por isso a expressão "12 * 3600 + 08" dá erro! A solução é dizer ao bash para interpretar os 08 e 09 como decimais.

Veja isso:
https://stackoverflow.com/questions/36238961/script-error-value-too-great-for-base-error-token-is-09


3. Re: Onde está o erro ???

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 28/01/2019 - 20:14h

Mauriciodez escreveu:

Pessoas ... estou quebrando a cabeça para descobrir e não consigo
o script abaixo é executado com o comando
watch -n 1 ./script.sh 


só que ele está dando erro nos segundos 38 e 39 >> http://ap.imagensbrasil.org/image/qWHN08

se eu tirar o 30 na variável INI da equação aí da erro nos segundos 08 e 09

#!/bin/bash

INI=`echo $(( $(who -b | awk '{ print $NF }' | awk -F':' '{print $1}') * 3600 + $(who -b | awk -F':' '{ print $NF }' ) * 60 + 30 ))`

FIN=`echo $(( $(date +%H) * 3600 + $(date +%M) * 60 + $(date +%S) ))`


HF=`echo $(( $(( $FIN - $INI )) / 3600 ))`
MF=`echo $(( $(( $(( $FIN - $INI )) - $HF * 3600 )) / 60 ))`
SF=`echo $(( $(( $FIN - $INI )) - $HF * 3600 - $MF * 60))`

if [ $HF -lt 10 ];then
HF=$(echo "0$HF")
fi

if [ $MF -lt 10 ];then
MF=$(echo "0$MF")
fi

if [ $SF -lt 10 ];then
SF=$(echo "0$SF")
fi

echo "$HF:$MF:$SF"

O problema é causado pelo motivo que já foi citado....
Solução:
Converta a var para base 10:
Ex:
x=08
echo $((10+08))
bash: 10+08: value too great for base (error token is "08")
echo $((10+ $((10#$x)) ))
18

Ou
Elimine o "ZERO" inicial....

Ou ainda, use o "awk":
awk '{printf $1+$2}' <<< "10 08"
18

att.:
marcelo oliver


4. Re: Onde está o erro ??? [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 28/01/2019 - 20:44h


Ryuk escreveu:

É aquele velho probleminha do bash interpretar os zeros iniciais como octal (00 - 07). Por isso a expressão "12 * 3600 + 08" dá erro! A solução é dizer ao bash para interpretar os 08 e 09 como decimais.

Veja isso:
https://stackoverflow.com/questions/36238961/script-error-value-too-great-for-base-error-token-is-09


krai velho ... eu já tinha passado por essa situação e já tinha feito isso em um outro script ... por algum motivo obscuro da mente não lembrei dessa parada !!!

Valew !!!

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts