Estoy escribiendo una secuencia de comandos RSS del horóscopo como introducción al proyecto Unix / Linux, y me encontré con un problema que mi profesor no pudo solucionar en el momento en que pude quedarme después de la clase. Como no podía entender cómo usar las fechas reales como qué verificar, pensé en probar la aritmética básica haciendo que la entrada del usuario fuera números estándar en formato MMDD. Según él, el script parece estar leyendo la entrada como código octal en lugar de entero. Aquí hay una muestra del guión:
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
Esta es la esencia, saqué la parte RSS. "olddate" es la entrada esperada de mi solicitud de lectura. Mientras 1121 a 1131, 1200 a 1222 y 0100 a 0120 funcionan, nada entre 1221 a 1232 funciona. Pensó que ese era el problema, ya que poner 113 sin un 0 inicial funcionó para Capricornio. También me encontré con un problema en el que 0323, que se suponía que me daría Aries (-gt 0320 && -lt 0332) me dio Acuario (cuyas fechas son -gt 0119 && -lt 0132 || -gt 0200 && -lt 0219) como así como 0417 no funciona (que es el otro rango de fechas para Aries, -gt 0400 && -lt 0420).
¿Qué hago para que BASH interprete la entrada como los números reales? Intentó cambiar el indicador de lectura para esperar "fecha de usuario" como entrada y luego agregó
olddate=`printf '%d\n' "$userdate"`
Pero eso no funcionó. Gracias de antemano a cualquiera que pueda ayudarme en esto.
fuente
test
tiene operadores numéricos explícitos.Respuestas:
Puede forzar la conversión de un número a una base específica en bash así:
En general el formato es
$((base#value))
.fuente