如何阻止Bash解释八进制代码而不是整数?


13

我正在写一个Horoscope RSS脚本,作为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至0120起作用时,1221至1232之间没有任何作用。他认为这是问题所在,因为摩113座的113领先0。我还遇到一个问题,就是应该给我白羊座(-gt 0320 && -lt 0332)的0323给我水瓶座(其日期是-gt 0119 && -lt 0132 || -gt 0200 && -lt 0219)为以及0417无法正常运行(这是白羊座的另一个日期范围-gt 0400 && -lt 0420)。

我该怎么做才能使BASH将输入解释为实际数字?他尝试更改读取提示,以期望“ userdate”作为输入,然后添加

olddate=`printf '%d\n' "$userdate"`

但这没有用。在此先感谢任何可以帮助我的人!


无法在bash 4.4.12上复制。
伊格纳西奥·巴斯克斯

1
$ olddate是一个字符串,而不是数字,因此请使用字符串比较并避免整个混乱。
斯蒂芬·哈里斯

2
@StephenHarris:运算符右边的值也是如此。这就是为什么要使用test显式数值运算符的原因。
伊格纳西奥·巴斯克斯·阿布拉姆斯

需要注意的一件事是,但与核心问题无关的是,如果您的出生日期和月份接近两个生肖之间的过渡,则您的生肖也部分取决于您的出生年份。您的十二生肖是根据您出生时太阳所在的天空的1/12来确定的,但是由于一年中的天数不是整数,也不是12的整数倍,因此与年复一年。这种变化太复杂了,以至于无法在if-else树中真正捕获,但这只是一个很好的认识。
Nzall

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.