搞砸了

时间:2012-12-10 21:04:22

标签: shell

我想在几秒钟内完成shell脚本的执行。

我的实施:

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

这显示了END时间而不是差异。 我无法猜出为什么减号不起作用。

2 个答案:

答案 0 :(得分:2)

假设您正在使用bash

你需要使用双重parens在shell中进行算术运算:

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

请注意,您不必使用美元符号来读取double parens中的变量。

答案 1 :(得分: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 ))
     

表达式被视为双引号内,但内部是双引号   括号不予特别处理。表达式中的所有标记都经过参数扩展,   命令替换和引用删除。算术扩展可以嵌套。

See also

  

3.2.4.2条件构造

     

((...))

(( expression ))
     

根据下述规则评估算术表达式(参见Shell Arithmetic)。如果表达式的值不为零,则返回状态为0;否则返回状态为1.这完全等同于

let "expression"
     

有关let builtin的完整描述,请参阅Bash Builtins。