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, die ich nach dem Unterricht noch hatte, nicht beheben konnte. Da ich nicht herausfinden konnte, wie ich tatsächliche Daten als Prüfobjekte verwenden kann, dachte ich, ich könnte es mit einfacher Arithmetik versuchen, indem ich die Benutzereingaben in Standardzahlen im MMDD-Format umsetze. Ihm zufolge scheint das Skript die Eingaben 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 ist das Grundgerüst, ich habe den RSS-Teil entfernt. „olddate“ ist die erwartete Eingabe von meiner Leseaufforderung. Während 1121 bis 1131, 1200 bis 1222 und 0100 bis 0120 funktionieren, funktioniert nichts zwischen 1221 und 1232. Er dachte, das sei das Problem, da die Eingabe von 113 ohne führende 0 für Steinbock 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 sind), und auch 0417 nicht funktionierte (das ist der andere Datumsbereich für Widder, -gt 0400 && -lt 0420).
Was mache ich, damit BASH die Eingabe als tatsächliche Zahlen interpretiert? Er hat versucht, die Leseaufforderung so zu ändern, dass sie "userdate" als Eingabe erwartet, und dann hinzugefügt
olddate=`printf '%d\n' "$userdate"`
aber das hat nicht funktioniert. Vielen Dank im Voraus an alle, die mir dabei helfen können!
Antwort1
Sie können die Konvertierung einer Zahl in eine bestimmte Basis in Bash wie folgt erzwingen:
$ foo=400
$ echo $((8#$foo))
256
$ bar=0100
$ echo $((10#$bar))
100
Im Allgemeinen ist das Format $((base#value))
.