Discussion:
[shell-script] Erro ocorre somente nas semanas 8 e 9 de cada ano
'Alberto Y. Fujihira' ayf@vicness.com.br [shell-script]
2018-02-24 14:57:28 UTC
Permalink
Tenho um script de backup em que utilizo a expressão abaixo para verificar
se a semana é par (0) ou impar (1).


#!/bin/sh
nro=$(($(date +%V) % 2))

Ela funciona o ano todo, com exceção das 8ª e 9ª semanas do ano, quando
ocorre o seguinte erro:

arithmetic expression: expecting EOF: "08 % 2"

Por que ocorre esse erro somente nessas semanas?
Alguma sugestão para resolver esse problema?


Obrigado.
Tiago Peczenyj tiago.peczenyj@gmail.com [shell-script]
2018-03-07 12:04:13 UTC
Permalink
Ola

Esse bug me é familiar tem mais de uma década, mas jamais vi em shell
script.

A primeira vez que eu vi foi em Javascript. O que acontece é que, sob
determinados contextos, um numero literal, inteiro, que começe por 0 vai
ser tratado como um numero OCTAL

E numeros octais vão de 0 a 7, ou seja 08 e 09 não são inteiros em formato
octal valido.

Solução? remova esse 0 da frente :)
Post by 'Alberto Y. Fujihira' ***@vicness.com.br [shell-script]
Tenho um script de backup em que utilizo a expressão abaixo para verificar
se a semana é par (0) ou impar (1).
#!/bin/sh
nro=$(($(date +%V) % 2))
Ela funciona o ano todo, com exceção das 8ª e 9ª semanas do ano, quando
arithmetic expression: expecting EOF: "08 % 2"
Por que ocorre esse erro somente nessas semanas?
Alguma sugestão para resolver esse problema?
Obrigado.
--
Tiago B. Peczenyj

http://about.me/peczenyj
Jonathan Lessa jonathanlessa@gmail.com [shell-script]
2018-03-07 12:12:57 UTC
Permalink
Bom dia!

complementando a resposta do Peczenyj, basta adicionar mudar sua expressão
de "+%V" para "+%-V" para que o zero seja suprimido das datas:

$ echo $(($(date +%V -d "20180225") % 2))
-bash: 08: value too great for base (error token is "08")


echo $(($(date +%-V -d "20180225") % 2))
0
Post by Tiago Peczenyj ***@gmail.com [shell-script]
Ola
Esse bug me é familiar tem mais de uma década, mas jamais vi em shell
script.
A primeira vez que eu vi foi em Javascript. O que acontece é que, sob
determinados contextos, um numero literal, inteiro, que começe por 0 vai
ser tratado como um numero OCTAL
E numeros octais vão de 0 a 7, ou seja 08 e 09 não são inteiros em formato
octal valido.
Solução? remova esse 0 da frente :)
Post by 'Alberto Y. Fujihira' ***@vicness.com.br [shell-script]
Tenho um script de backup em que utilizo a expressão abaixo para
verificar se a semana é par (0) ou impar (1).
#!/bin/sh
nro=$(($(date +%V) % 2))
Ela funciona o ano todo, com exceção das 8ª e 9ª semanas do ano, quando
arithmetic expression: expecting EOF: "08 % 2"
Por que ocorre esse erro somente nessas semanas?
Alguma sugestão para resolver esse problema?
Obrigado.
--
Tiago B. Peczenyj
http://about.me/peczenyj
--
Att.:
Jonathan Lessa
Licenciado em Informática
Alysson Azevedo alysson@rxsaude.com.br [shell-script]
2018-03-07 12:14:27 UTC
Permalink
Mas é estranho essa hipótese do octal porque o problema deveria ocorrer
também nas semandas 18, 19, 28, 29...


*Alysson Azevedo*
*Sócio Fundador / CTO*
*_______*

*Rx Tecnologia & Educação*
Post by Jonathan Lessa ***@gmail.com [shell-script]
Bom dia!
complementando a resposta do Peczenyj, basta adicionar mudar sua
$ echo $(($(date +%V -d "20180225") % 2))
-bash: 08: value too great for base (error token is "08")
echo $(($(date +%-V -d "20180225") % 2))
0
Post by Tiago Peczenyj ***@gmail.com [shell-script]
Ola
Esse bug me é familiar tem mais de uma década, mas jamais vi em shell
script.
A primeira vez que eu vi foi em Javascript. O que acontece é que, sob
determinados contextos, um numero literal, inteiro, que começe por 0 vai
ser tratado como um numero OCTAL
E numeros octais vão de 0 a 7, ou seja 08 e 09 não são inteiros em
formato octal valido.
Solução? remova esse 0 da frente :)
Post by 'Alberto Y. Fujihira' ***@vicness.com.br [shell-script]
Tenho um script de backup em que utilizo a expressão abaixo para
verificar se a semana é par (0) ou impar (1).
#!/bin/sh
nro=$(($(date +%V) % 2))
Ela funciona o ano todo, com exceção das 8ª e 9ª semanas do ano, quando
arithmetic expression: expecting EOF: "08 % 2"
Por que ocorre esse erro somente nessas semanas?
Alguma sugestão para resolver esse problema?
Obrigado.
--
Tiago B. Peczenyj
http://about...me/peczenyj
--
Jonathan Lessa
Licenciado em Informática
Tiago Peczenyj tiago.peczenyj@gmail.com [shell-script]
2018-03-07 12:21:00 UTC
Permalink
18 não tem problema pois vc tem uma expressão numérica começando em 0

018 seria um problema
Post by Alysson Azevedo ***@rxsaude.com.br [shell-script]
Mas é estranho essa hipótese do octal porque o problema deveria ocorrer
também nas semandas 18, 19, 28, 29...
*Alysson Azevedo*
*Sócio Fundador / CTO*
*_______*
*Rx Tecnologia & Educação*
+55 41 99954-7451
Post by Jonathan Lessa ***@gmail.com [shell-script]
Bom dia!
complementando a resposta do Peczenyj, basta adicionar mudar sua
$ echo $(($(date +%V -d "20180225") % 2))
-bash: 08: value too great for base (error token is "08")
echo $(($(date +%-V -d "20180225") % 2))
0
Post by Tiago Peczenyj ***@gmail.com [shell-script]
Ola
Esse bug me é familiar tem mais de uma década, mas jamais vi em shell
script.
A primeira vez que eu vi foi em Javascript. O que acontece é que, sob
determinados contextos, um numero literal, inteiro, que começe por 0 vai
ser tratado como um numero OCTAL
E numeros octais vão de 0 a 7, ou seja 08 e 09 não são inteiros em
formato octal valido.
Solução? remova esse 0 da frente :)
Post by 'Alberto Y. Fujihira' ***@vicness.com.br [shell-script]
Tenho um script de backup em que utilizo a expressão abaixo para
verificar se a semana é par (0) ou impar (1).
#!/bin/sh
nro=$(($(date +%V) % 2))
Ela funciona o ano todo, com exceção das 8ª e 9ª semanas do ano, quando
arithmetic expression: expecting EOF: "08 % 2"
Por que ocorre esse erro somente nessas semanas?
Alguma sugestão para resolver esse problema?
Obrigado.
--
Tiago B. Peczenyj
http://about.me/peczenyj
--
Jonathan Lessa
Licenciado em Informática
--
Tiago B. Peczenyj

http://about.me/peczenyj
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-03-07 12:21:17 UTC
Permalink
​Vc pode chamar o interpretador aritmético do Shell usando $(( ... )), ou
$[ ... ], ou com o cmd let. Esse cara, sempre que vê um numerro começado
por zero, imagina que seja octal.

O mesmo ocorre com outros utilitários tb.​

Abraços,
Julio

*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» O treinamento está muito caro?*

*Ministramos um excelente treinamento de Shell,*
*no **formato EAD. **Veja os detalhes aqui.*
<http://www.dicas-l.com.br/programacao-shell-linux/>

*Damos treinamento em sua empresa **com certificado*
*e nota fiscal **por **um preço, **no mínimo, 50% **abaixo*
*de qualquer curso.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas.. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by Alysson Azevedo ***@rxsaude.com.br [shell-script]
Mas é estranho essa hipótese do octal porque o problema deveria ocorrer
também nas semandas 18, 19, 28, 29...
*Alysson Azevedo*
*Sócio Fundador / CTO*
*_______*
*Rx Tecnologia & Educação*
+55 41 99954-7451 <(41)%2099954-7451>
Post by Jonathan Lessa ***@gmail.com [shell-script]
Bom dia!
complementando a resposta do Peczenyj, basta adicionar mudar sua
$ echo $(($(date +%V -d "20180225") % 2))
-bash: 08: value too great for base (error token is "08")
echo $(($(date +%-V -d "20180225") % 2))
0
Post by Tiago Peczenyj ***@gmail.com [shell-script]
Ola
Esse bug me é familiar tem mais de uma década, mas jamais vi em shell
script.
A primeira vez que eu vi foi em Javascript. O que acontece é que, sob
determinados contextos, um numero literal, inteiro, que começe por 0 vai
ser tratado como um numero OCTAL
E numeros octais vão de 0 a 7, ou seja 08 e 09 não são inteiros em
formato octal valido.
Solução? remova esse 0 da frente :)
Post by 'Alberto Y. Fujihira' ***@vicness.com.br [shell-script]
Tenho um script de backup em que utilizo a expressão abaixo para
verificar se a semana é par (0) ou impar (1).
#!/bin/sh
nro=$(($(date +%V) % 2))
Ela funciona o ano todo, com exceção das 8ª e 9ª semanas do ano, quando
arithmetic expression: expecting EOF: "08 % 2"
Por que ocorre esse erro somente nessas semanas?
Alguma sugestão para resolver esse problema?
Obrigado.
--
Tiago B. Peczenyj
http://about.me/peczenyj
--
Jonathan Lessa
Licenciado em Informática
Jonathan Lessa jonathanlessa@gmail.com [shell-script]
2018-03-07 12:20:45 UTC
Permalink
Não acontece nas semanas 10 em diante porque esses números não iniciam com
zero:

$ echo $(( 018 % 2))
-bash: 018: value too great for base (error token is "018")

$ echo $(( 18 % 2))
0
Post by Alysson Azevedo ***@rxsaude.com.br [shell-script]
Mas é estranho essa hipótese do octal porque o problema deveria ocorrer
também nas semandas 18, 19, 28, 29...
*Alysson Azevedo*
*Sócio Fundador / CTO*
*_______*
*Rx Tecnologia & Educação*
+55 41 99954-7451 <(41)%2099954-7451>
Post by Jonathan Lessa ***@gmail.com [shell-script]
Bom dia!
complementando a resposta do Peczenyj, basta adicionar mudar sua
$ echo $(($(date +%V -d "20180225") % 2))
-bash: 08: value too great for base (error token is "08")
echo $(($(date +%-V -d "20180225") % 2))
0
Post by Tiago Peczenyj ***@gmail.com [shell-script]
Ola
Esse bug me é familiar tem mais de uma década, mas jamais vi em shell
script.
A primeira vez que eu vi foi em Javascript. O que acontece é que, sob
determinados contextos, um numero literal, inteiro, que começe por 0 vai
ser tratado como um numero OCTAL
E numeros octais vão de 0 a 7, ou seja 08 e 09 não são inteiros em
formato octal valido.
Solução? remova esse 0 da frente :)
Post by 'Alberto Y. Fujihira' ***@vicness.com.br [shell-script]
Tenho um script de backup em que utilizo a expressão abaixo para
verificar se a semana é par (0) ou impar (1).
#!/bin/sh
nro=$(($(date +%V) % 2))
Ela funciona o ano todo, com exceção das 8ª e 9ª semanas do ano, quando
arithmetic expression: expecting EOF: "08 % 2"
Por que ocorre esse erro somente nessas semanas?
Alguma sugestão para resolver esse problema?
Obrigado.
--
Tiago B. Peczenyj
http://about.me/peczenyj
--
Jonathan Lessa
Licenciado em Informática
--
Att.:
Jonathan Lessa
Licenciado em Informática
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-03-07 12:15:33 UTC
Permalink
Olha a hora:
$ date
Qua Mar 7 09:09:28 -03 2018

A hora se enquadra no seu erro, pois é 09. Vou reproduzir o erro para vc
ver:
$ echo $(($(date +%H) + 1))
bash: 09: valor muito grande para esta base de numeração (token com erro é
"09")

Tá aí o teu erro. Vc tem de dizer a ele que vc está usando a base decimal,
e para isso fação assim:
$ echo $((10#$(date +%H) + 1))
10

Outra forma de fazer isso, mas essa é uma opção do date, é botar um
sublinha antes do caractere de formatação:
$ echo $(($(date +%_H) + 1))
10


Abraços,
Julio

*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» O treinamento está muito caro?*

*Ministramos um excelente treinamento de Shell,*
*no **formato EAD. **Veja os detalhes aqui.*
<http://www.dicas-l.com.br/programacao-shell-linux/>

*Damos treinamento em sua empresa **com certificado*
*e nota fiscal **por **um preço, **no mínimo, 50% **abaixo*
*de qualquer curso.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas.. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by 'Alberto Y. Fujihira' ***@vicness.com.br [shell-script]
Tenho um script de backup em que utilizo a expressão abaixo para verificar
se a semana é par (0) ou impar (1).
#!/bin/sh
nro=$(($(date +%V) % 2))
Ela funciona o ano todo, com exceção das 8ª e 9ª semanas do ano, quando
arithmetic expression: expecting EOF: "08 % 2"
Por que ocorre esse erro somente nessas semanas?
Alguma sugestão para resolver esse problema?
Obrigado.
Loading...