J'écris un script RSS Horoscope en tant qu'introduction au projet Unix / Linux et j'ai rencontré un problème que mon professeur n'a pas pu résoudre pendant le temps que j'ai pu rester après les cours. Comme je ne pouvais pas comprendre comment utiliser les dates réelles comme éléments à vérifier, j'ai pensé essayer l'arithmétique de base en demandant aux utilisateurs de saisir des nombres standard au format MMDD. Selon lui, le script semble lire l'entrée en tant que code octal au lieu d'un entier. Voici un exemple du 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
Ce sont les os nus, j'ai sorti la partie RSS. "olddate" est l'entrée attendue de mon invite de lecture. Alors que 1121 à 1131, 1200 à 1222 et 0100 à 0120 fonctionnent, rien entre 1221 et 1232 ne fonctionne. Il a pensé que c'était le problème depuis que mettre 113 sans un 0 de tête travaillait pour Capricorn. Je viens également de rencontrer un problème où 0323 qui était censé me donner le Bélier (-gt 0320 && -lt 0332) m'a donné Verseau (dont les dates sont -gt 0119 && -lt 0132 || -gt 0200 && -lt 0219) comme ainsi que 0417 ne fonctionne pas (qui est l'autre plage de dates pour le Bélier, -gt 0400 && -lt 0420).
Que dois-je faire pour que BASH interprète l'entrée comme les nombres réels? Il a essayé de changer l'invite de lecture pour s'attendre à "userdate" en entrée, puis en ajoutant
olddate=`printf '%d\n' "$userdate"`
Mais ça n'a pas marché. Merci d'avance à tous ceux qui peuvent m'aider!
la source
test
a des opérateurs numériques explicites.Réponses:
Vous pouvez forcer la conversion d'un nombre en une base spécifique dans bash comme ceci:
En général, le format est
$((base#value))
.la source