我试图计算出 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 只是从另一个脚本接收时间戳)
我试图减去$c
from的输出$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
的实际值),因为只打印给出的内容,它不执行算术运算。d
c
echo
duration=$((d-c))
这应该可以进行减法。
答案2
你用什么外壳?算术在老式学校中没有实现/bin/sh
,但在 bash 中工作得很好:
~$ a=10000000
~$ b=200
~$ echo $((a-b))
9999800