Ich schreibe ein Horoskop-RSS-Skript als Einführung in ein Unix / Linux-Projekt und bin auf ein Problem gestoßen, das mein Professor in der Zeit, in der ich nach dem Unterricht bleiben konnte, nicht beheben konnte. Da ich nicht herausfinden konnte, wie man tatsächliche Daten als zu überprüfende Daten verwendet, dachte ich, ich würde eine Grundrechenart ausprobieren, indem die Benutzereingabe Standardzahlen im MMDD-Format sein sollte. Ihm zufolge scheint das Skript die Eingabe als Oktalcode statt als Ganzzahl zu lesen. Hier ist ein Beispiel des Skripts:
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
Das sind die nackten Knochen, ich habe den RSS-Teil rausgenommen. "olddate" ist die erwartete Eingabe von meiner Leseaufforderung. Während 1121 bis 1131, 1200 bis 1222 und 0100 bis 0120 arbeiten, funktioniert nichts zwischen 1221 bis 1232. Er vermutete, dass dies das Problem war, da das Setzen von 113 ohne führende 0 für Capricorn funktionierte. Ich bin auch gerade auf ein Problem gestoßen, bei dem 0323, das mir Widder geben sollte (-gt 0320 && -lt 0332), mir Wassermann gab (dessen Daten -gt 0119 && -lt 0132 || -gt 0200 && -lt 0219) als und 0417 funktioniert nicht (das ist der andere Datumsbereich für Widder, -gt 0400 && -lt 0420).
Was mache ich, damit BASH Eingaben als tatsächliche Zahlen interpretiert? Er versuchte, die Leseaufforderung zu ändern, um "userdate" als Eingabe zu erwarten, und fügte dann hinzu
olddate=`printf '%d\n' "$userdate"`
aber das hat nicht funktioniert. Vielen Dank im Voraus an alle, die mir dabei helfen können!
quelle
test
hat explizite numerische Operatoren.Antworten:
Sie können die Umwandlung einer Zahl in eine bestimmte Basis in Bash erzwingen, wie folgt:
Im Allgemeinen ist das Format
$((base#value))
.quelle