1

我想以秒为单位执行 shell 脚本。

我的实现:

#!/bin/sh
START=$(date +%s)
echo $START
.
.
bla bla bla
.
.
.
END=$(date +%s)
echo $END
DIFF=($END - $START)
echo  "Time difference is "$DIFF

这向我显示了结束时间而不是差异。我无法猜测减号不起作用的原因。

4

2 回答 2

2

假设您正在使用bash

您需要使用双括号在 shell 中进行算术运算:

((DIFF = START - END))
#or
DIFF=$((START - END))

请注意,您不必使用美元符号来读取双括号内的变量。

于 2012-12-10T21:11:51.770 回答
1

您需要美元双括号进行算术运算:

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 内置函数的完整描述。

于 2012-12-10T21:11:16.157 回答