Я пишу RSS-сценарий Horoscope в качестве вступления к проекту Unix / Linux и столкнулся с проблемой, которую мой профессор не мог исправить за то время, когда я смог остаться после занятий. Поскольку я не мог понять, как использовать фактические даты для проверки, я решил попробовать основную арифметику, используя вводимые пользователем стандартные числа в формате MMDD. По его словам, сценарий, похоже, читает ввод в виде восьмеричного кода, а не целого числа. Вот пример сценария:
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
Это голые кости, я достал часть RSS. «olddate» - ожидаемый ввод из моего приглашения на чтение. Пока работают 1121–1131, 1200–1222 и 0100–120, ничего между 1221–1232 не работает. Он полагал, что это было проблемой, поскольку «113» без лидирующего 0 работал на Козерога. Я также столкнулся с проблемой, когда 0323, который должен был дать мне Овен (-gt 0320 && -lt 0332), дал мне Водолея (даты которого -gt 0119 && -lt 0132 || -gt 0200 && -lt 0219) как также 0417 не работает (это другой диапазон дат для Овна, -gt 0400 && -lt 0420).
Что мне делать, чтобы BASH интерпретировал ввод как фактические числа? Он попытался изменить приглашение на чтение, чтобы ожидать ввода «userdate», а затем добавил
olddate=`printf '%d\n' "$userdate"`
но это не сработало. Заранее спасибо всем, кто может мне помочь в этом!
источник
test
имеет явные числовые операторы.Ответы:
Вы можете принудительно преобразовать число в конкретную базу в bash следующим образом:
В общем, формат есть
$((base#value))
.источник