Bash modulo奇怪的结果(不是否定的)

时间:2015-11-28 18:20:40

标签: bash modulo

我想在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 ......

2 个答案:

答案 0 :(得分:0)

Bash shell中的算法仅使用整数来完成,因此最好更改方法(或者将数值乘以10的大幂以使它们成为整数)。

当您在Bash中使用整数进行数学运算时,请将算术包含在双括号中,或者使用&#39; let&#39;关键字。

((${jdn} % ${p}))

如这些来源所述。

答案 1 :(得分:0)

我找到了一个解决方案:没有规模,它运行正常。所以这是我的代码:

days=$(echo "${jdn} % ${p}"|bc)

我只需要确保模数确实给了0并且我可以在分区中设置比例。最后似乎更像是一个数学问题......