Saya sedang menulis naskah Horoskop RSS sebagai pengantar untuk proyek Unix / Linux, dan mengalami masalah yang tidak dapat diperbaiki oleh Profesor saya pada saat saya dapat tinggal di kelas. Karena saya tidak tahu bagaimana menggunakan tanggal aktual sebagai apa yang harus diperiksa, saya pikir saya akan mencoba aritmatika dasar dengan meminta input pengguna menjadi angka standar dalam format MMDD. Menurutnya, skrip tampaknya membaca input sebagai kode oktal bukan bilangan bulat. Berikut contoh skrip:
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
Ini adalah tulang telanjang, saya mengambil bagian RSS. "olddate" adalah input yang diharapkan dari prompt baca saya. Sementara 1121 hingga 1131, 1200 hingga 1222, dan 0100 hingga 0120 berfungsi, tidak ada yang berfungsi antara 1221 hingga 1232. Dia mengira itu adalah masalah karena menempatkan 113 tanpa angka 0 bekerja untuk Capricorn. Saya juga baru saja mengalami masalah di mana 0323 yang seharusnya memberi saya Aries (-gt 0320 && -lt 0332) memberi saya Aquarius (yang tanggalnya -gt 0119 && -lt 0132 || -gt 0200 && -lt 0219) sebagai serta 0417 tidak berfungsi (yang merupakan rentang tanggal lainnya untuk Aries, -gt 0400 && -lt 0420).
Apa yang harus saya lakukan agar BASH menginterpretasikan input sebagai angka aktual? Dia mencoba mengubah prompt baca untuk mengharapkan "userdate" sebagai input dan kemudian menambahkan
olddate=`printf '%d\n' "$userdate"`
tapi itu tidak berhasil. Terima kasih sebelumnya kepada siapa saja yang dapat membantu saya dalam hal ini!
sumber
test
memiliki operator numerik eksplisit.Jawaban:
Anda dapat memaksa konversi nomor ke basis tertentu di bash seperti:
Secara umum formatnya adalah
$((base#value))
.sumber