我想在Bash脚本中使用modulo,但结果总是很低。 我需要这样的东西:days = jdn mod p 这就是我所拥有的:
#!/bin/bash
if [ $# -ne 2 ]
then
echo "Fout, syntaxis: $0 maand(in cijfers) jaar"
exit 1
fi
a=$(echo "14 - $1"|bc)
y=$(echo "$2 + 4800 - $a"|bc)
m=$(echo "12 * $a - 3 + $1"|bc)
jdn=$(echo "scale=2;1 + (153 * $m +2)/5 + 365 * $y +${y}/4 - ${y}/100 - 32045"|bc)
jdn=$(echo "$jdn + 1"|bc|sed "s/...$//")
d=1
p=$(echo "29.530588853")
while [ "$d" != "32" ]
do
echo -n "$d"
days=$(echo "scale=2;${jdn} % ${p}"|bc)
fase=$(echo "scale=2;$p / $days"|bc)
fase1=$(echo "${fase}<7.382647213"|bc)
if [ $fase1 -eq 1 ]
then
echo -n "@"
elif [ $(echo "${fase}<14.76529443"|bc) -eq 1 ]
then
echo -n ")"
elif [ $(echo "$fase<22.14794164"|bc) -eq 1 ]
then
echo -n "0"
else
echo -n "("
fi
d=$(echo "$d + 1"|bc)
jdn=$(echo "$jdn +1"|bc)
done
jdn的结果是2455369,天数应该是9.55但是结果是0.054 ......
答案 0 :(得分:0)
Bash shell中的算法仅使用整数来完成,因此最好更改方法(或者将数值乘以10的大幂以使它们成为整数)。
当您在Bash中使用整数进行数学运算时,请将算术包含在双括号中,或者使用&#39; let&#39;关键字。
((${jdn} % ${p}))
如这些来源所述。
答案 1 :(得分:0)
我找到了一个解决方案:没有规模,它运行正常。所以这是我的代码:
days=$(echo "${jdn} % ${p}"|bc)
我只需要确保模数确实给了0并且我可以在分区中设置比例。最后似乎更像是一个数学问题......