Estou escrevendo um script RSS do Horóscopo como uma introdução ao projeto Unix / Linux e deparei-me com um problema que meu professor não conseguiu resolver no período em que pude ficar depois da aula. Como não conseguia descobrir como usar datas reais como o que verificar, pensei em tentar a aritmética básica fazendo com que a entrada do usuário fosse 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, tirei a parte do 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 à frente funcionava para Capricórnio. Eu também acabei de encontrar um problema em que 0323, que deveria me dar Áries (-gt 0320 && -lt 0332), me deu Aquário (cujas datas são -gt 0119 && -lt 0132 || -gt 0200 && -lt 0219) como 0417 não está funcionando (que é o outro período de Áries, -gt 0400 e& -lt 0420).
O que faço para que o BASH interprete a entrada como os números reais? Ele tentou alterar o prompt de leitura para esperar "data do usuário" como entrada e, em seguida, adicionar
olddate=`printf '%d\n' "$userdate"`
mas isso não funcionou. Agradecemos antecipadamente a quem puder me ajudar nisso!
fonte
test
possui operadores numéricos explícitos.Respostas:
Você pode forçar a conversão de um número para uma base específica no bash, da seguinte maneira:
Em geral, o formato é
$((base#value))
.fonte