Sto scrivendo uno script RSS di Horoscope come introduzione al progetto Unix / Linux e ho riscontrato un problema che il mio professore non è riuscito a risolvere nel tempo in cui sono stato in grado di rimanere dopo le lezioni. Dal momento che non riuscivo a capire come usare le date effettive come cosa controllare, ho pensato di provare l'aritmetica di base facendo in modo che l'input dell'utente fosse un numero standard in formato MMDD. Secondo lui, lo script sembra leggere l'input come codice ottale anziché intero. Ecco un esempio dello 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
Queste sono le ossa nude, ho tolto la parte RSS. "olddate" è l'input previsto dal mio prompt di lettura. Mentre da 1121 a 1131, da 1200 a 1222 e da 0100 a 0120 funzionano, non funziona nulla tra 1221 e 1232. Ha pensato che fosse il problema da quando ha messo 113 senza uno 0 iniziale ha funzionato per il Capricorno. Ho anche incontrato un problema in cui 0323 che avrebbe dovuto darmi Ariete (-gt 0320 && -lt 0332) mi ha dato Aquarius (le cui date sono -gt 0119 && -lt 0132 || -gt 0200 && -lt 0219) come così come 0417 non funziona (che è l'altro intervallo di date per Ariete, -gt 0400 && -lt 0420).
Cosa devo fare affinché BASH interpreti l'input come i numeri effettivi? Ha provato a cambiare il prompt di lettura aspettandosi "userdate" come input e quindi aggiungendo
olddate=`printf '%d\n' "$userdate"`
ma non ha funzionato. Grazie in anticipo a chiunque mi possa aiutare in questo!
test
ha operatori numerici espliciti.