Unix shell 中的计算

Unix shell 中的计算

我试图计算出 2 个 unix 时间的差异来进行简单的计算(在 shell 脚本中),但它似乎不起作用。

我设置了两个变量,一个称为$d,另一个称为$c

这是我目前用于设置变量的语法:

c= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'
echo $c
d= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'
echo $d

(变量 a 和 b 只是从另一个脚本接收时间戳)

我试图减去$cfrom的输出$d,但我使用的每种方法似乎都不起作用。

我尝试过以下方法:1)

duration=$(echo "$d - $c")
echo $duration 

2)

duration=$((d-c))
echo $duration 

答案1

c= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'

您在这里缺少命令替换。这将只运行echo | awk管道,同时c在 环境中设置为空值echo

您在下面使用了命令替换,在 中duration=$(echo "$d - $c"),这也是您在这里所需要的。 IE

c=$(echo "$a" | awk  ...)

(请注意,符号周围没有空格=,这就是将普通赋值与命令分开的原因,请参阅shell 脚本中变量赋值中的空格

另外,查看 awk 脚本中的数字,您似乎有 31 天的月份,相应地有 372 天的年份,这可能是您想要的,也可能不是您想要的。如果您的输入也有秒,则 awk 脚本不会使用它们。 (+ $6最后应该有 a 吗?)$a两个命令中也有,而不是$a$b

duration=$(echo "$d - $c")

这只会设置duration为一个字符串(带有和5678 - 1234的实际值),因为只打印给出的内容,它不执行算术运算。dcecho

duration=$((d-c))

这应该可以进行减法。

答案2

你用什么外壳?算术在老式学校中没有实现/bin/sh,但在 bash 中工作得很好:

~$ a=10000000
~$ b=200
~$ echo $((a-b))
9999800

相关内容