Como faço para impedir que o Bash interprete o código octal em vez de inteiro?

12

Estou escrevendo um script RSS do Horoscope como introdução ao projeto Unix / Linux, e me deparei com um problema que meu Professor não pôde consertar no tempo em que eu consegui ficar depois da aula. Como não consegui descobrir como usar as datas reais como o que verificar, pensei em tentar a aritmética básica com a entrada do usuário em números padrão no formato MMDD. Segundo ele, o script parece estar lendo a entrada como código octal em vez de inteiro. Aqui está uma amostra do script:

    elif [ "$olddate" -gt 1121 ] && [ "$olddate" -lt 1131 ] || [ "$olddate" -gt 1200 ] && [ "$olddate" -lt 1222 ]
then
echo "You are Sagittarius"
exit
elif [ "$olddate" -gt 1221 ] && [ "$olddate" -lt 1232 ] || [ "$olddate" -gt 0100 ] && [ "$olddate" -lt 0120 ]
then
echo "You are Capricorn"
exit

Este é o esqueleto, eu tirei a parte RSS. "olddate" é a entrada esperada do meu prompt de leitura. Enquanto 1121 a 1131, 1200 a 1222 e 0100 a 0120 funcionam, nada entre 1221 a 1232 funciona. Ele imaginou que esse era o problema, já que colocar 113 sem um 0 inicial funcionava para Capricórnio. Eu também me deparei com um problema em que o 0323 que deveria me dar Aries (-gt 0320 & -lt 0332) me deu Aquarius (cujas datas são -gt 0119 & -lt 0132 || -gt 0200 & < -lt 0219) assim como 0417 não funciona (que é o outro intervalo de datas para Áries, -gt 0400 & -lt 0420).

O que eu faço para que o BASH interprete a entrada como os números reais? Ele tentou alterar o prompt de leitura para esperar "userdate" como entrada e, em seguida, adicionar

olddate='printf '%d\n' "$userdate"'

mas isso não funcionou. Agradecemos antecipadamente a qualquer um que possa me ajudar nisso!

    
por Irre Levant 23.11.2017 / 02:29

1 resposta

23

Você pode forçar a conversão de um número para uma base específica no bash da seguinte forma:

$ foo=400
$ echo $((8#$foo))
256
$ bar=0100
$ echo $((10#$bar))
100

Em geral, o formato é $((base#value)) .

    
por 23.11.2017 / 02:40