Pular para o conteúdo

Como contornar o erro -bash: 08: value too great for base (error token is "08")

Dica publicada em Shell Script / Avançado
Perfil removido removido
Hits: 8.003 Categoria: Shell Script Subcategoria: Avançado
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Como contornar o erro -bash: 08: value too great for base (error token is "08")

Olá, galera.

Me deparei com um problema em um script de rotina que havia feito. Logo agora, que entramos no mês de agosto, o script simplesmente parou de executar, retornando o seguinte erro:

-bash: 08: value too great for base (error token is "08")

Dei uma estudada em cima do erro, não achei uma solução em português, então resolvi realizar meu primeiro post no VOL. Dois links que me ajudaram na solução:
Identifiquei que o problema surge devido ao fato do Shell identificar números com prefixo 0(Zero) como números da base octal. Por exemplo:

(00, 01, 02, 03, 04, 05, 06, 07) -> base octal que vai de 00 a 07.

Como surgiu o problema? No meu script eu tenho um array onde seu conteúdo é o nome de todos meses do ano abreviados, e de index utilizo o mês obtido através do comando "date".

O comando "date" retorna somente o número do mês com o 0 antes. Por exemplo, o mês de Janeiro ele retorna 01, Fevereiro retorna 02, e assim sucessivamente. E logicamente o Shell vai identifica-lo como um número octal por começar com 0.

Segue abaixo um trecho do código:

mes="$(date +%m)"
meses=(mes jan fev mar abr mai jun ago set out nov dez)
echo "${meses[mes]}"

Para contornar esse problema, é necessário passar o número armazenado na variável "mês" da base octal para base decimal. Falando de forma menos técnica, basta remover o 0(zero) do início do número.

Assim, foi adicionado uma linha de código que remove esse 0. Cheguei a essa solução utilizando meus conhecimentos e a ajuda dos links anexados anteriormente para armazenar a conversão da base a mesma variável.

mes="$(date +%m)"
mes=$((${mes#0}))
meses=(mes jan fev mar abr mai jun ago set out nov dez)
echo "${meses[mes]}"

Esse erro no meu script, só acontece nos meses 08 e 09 (agosto e setembro), pois estão fora do range da base octal, entretanto, fica a dica para caso alguém passe pelo mesmo problema.

Obrigado, galera.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Instrução for( ; ; ) aprimorada no Java 1.5

Metasploitable no VirtualBox

Lazarus - Ressuscitando dados do Firefox

Instalando Google Chrome no Ubuntu 24.04 LTS

Instalando o Flash Player no Debian Etch em máquinas 64 bits

Script para verificar LOGs do Squid e selecionar páginas a serem bloqueadas

Autocompletar path no comando read

Criando um arquivo .tar auto-instalável

Testando se o servidor está no ar, caso não esteja, a máquina é desligada

Usando o script alertaTwitter

#1 Comentário enviado por dix em 03/04/2020 - 10:02h
Muito obrigado! Não fazia idéia disso e estava parado por causa desse erro.
#2 Comentário enviado por mgbmau em 07/05/2020 - 14:39h
Tive mesmo problema, como já previsto na maioria dos problemas de shell passei usar o #!/bin/ksh e resolvido sem nenhum item a mais de script.
Instala Korn shell (ksh) e #!/bin/ksh na primeira linha do script.
#3 Comentário enviado por removido em 07/05/2020 - 15:15h
E ae amigo, não conhecia esse ksh, mas essa solução também é valida! Vou testa-lo depois.

[2] Comentário enviado por mgbmau em 07/05/2020 - 14:39h

Tive mesmo problema, como já previsto na maioria dos problemas de shell passei usar o #!/bin/ksh e resolvido sem nenhum item a mais de script.
Instala Korn shell (ksh) e #!/bin/ksh na primeira linha do script.


Contribuir com comentário

Entre na sua conta para comentar.