linux - 作业 : Trying to calculate Easter using arithmetic evaluations

标签 linux bash

<分区>

所以我们的作业是使用一些计算来计算复活节:

p = v1+v2
v1 = (6*v2+m4+m2) mod 7
v2 = (16+m19 ) mod 30
m2 = 2*(year mod 4)
m4 = 4*(year mod 7)
m19 = 19*(year mod 19)

所以这些是我们需要转换为 Bash 的计算。这是我到目前为止所做的,运气不佳:

 read -p year

 Am19=$(expr year%19)

 m19=$(19*(Am19))

 Am4=$(expr year%7)

 m4=$(19*(Am4))

 Am2=$(expr year%4)

 m2=$(2*(Am2))

 Av2=$(16+(m19))

 v2=$(expr Av2%30)

 Av1=$(6*(v2)+m4+m2)

 v1=$(expr Av1%7)

 p=$(v1+v2)

 echo "$p"

用户应该使用读取命令输入年份(如 2000) 并且程序应该返回数字 $p 我得到这些错误

main.sh: command substitution: line 5: syntax error near unexpected token `Am19'
main.sh: command substitution: line 5: `19*(Am19))'
main.sh: command substitution: line 7: syntax error near unexpected token `Am4'
main.sh: command substitution: line 7: `19*(Am4))'
main.sh: command substitution: line 9: syntax error near unexpected token `Am2'
main.sh: command substitution: line 9: `2*(Am2))'
main.sh: command substitution: line 10: syntax error near unexpected token `m19'
main.sh: command substitution: line 10: `16+(m19))'
main.sh: command substitution: line 12: syntax error near unexpected token `v2'
main.sh: command substitution: line 12: `6*(v2)+m4+m2)'
main.sh: line 13: v1+v2: command not found

我不知道发生了什么,任何帮助总是很感激,谢谢大家

最佳答案

算术展开式使用双括号:

m19=$((19*(Am19)))

因此,如果您省略 expr,则需要双括号。

关于linux - 作业 : Trying to calculate Easter using arithmetic evaluations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56457719/

相关文章:

linux - 如何以编程方式访问 iptables?

linux - 如何链接到特定的 glibc 版本?

linux - CentOS系统上的gcc版本问题

linux - 有什么方法可以通过 sed 删除第一次出现的模式吗?

linux - Bash 脚本不会生成 cat 的子进程

git - 通过终端在 Github/Gitlab 上创建一个新项目

java - 来自内核的 GC 信号而不是固定的 JVM 堆大小

regex - 如何使用 zgrep 和正则表达式?

regex - 在 bash 循环中使用 if 语句过滤结果的正确方法

bash - 在awk中转换日期格式,行包含2个日期和一个ip