我想以秒为单位执行 shell 脚本。
我的实现:
#!/bin/sh
START=$(date +%s)
echo $START
.
.
bla bla bla
.
.
.
END=$(date +%s)
echo $END
DIFF=($END - $START)
echo "Time difference is "$DIFF
这向我显示了结束时间而不是差异。我无法猜测减号不起作用的原因。
我想以秒为单位执行 shell 脚本。
我的实现:
#!/bin/sh
START=$(date +%s)
echo $START
.
.
bla bla bla
.
.
.
END=$(date +%s)
echo $END
DIFF=($END - $START)
echo "Time difference is "$DIFF
这向我显示了结束时间而不是差异。我无法猜测减号不起作用的原因。
假设您正在使用bash
:
您需要使用双括号在 shell 中进行算术运算:
((DIFF = START - END))
#or
DIFF=$((START - END))
请注意,您不必使用美元符号来读取双括号内的变量。
您需要美元双括号进行算术运算:
DIFF=$(($END - $START))
如:
#!/bin/bash
START=$(date +%s)
echo $START
sleep 2
END=$(date +%s)
echo $END
DIFF=$(($END - $START))
echo "Time difference is" $DIFF
Bash参考手册说:
3.5.5 算术展开
算术扩展允许对算术表达式求值并替换结果。算术展开的格式为:
$(( expression ))
表达式被视为在双引号内,但括号内的双引号不会被特殊处理。表达式中的所有标记都经过参数扩展、命令替换和引号删除。算术扩展可以嵌套。
另见:
3.2.4.2 条件构造
((……))
(( expression ))
算术表达式根据以下描述的规则进行评估(请参阅Shell Arithmetic)。如果表达式的值为非零,则返回状态为0;否则返回状态为 1。这完全等价于
let "expression"
请参阅 Bash Builtins,了解 let 内置函数的完整描述。