算术表达式:期待主要:

时间:2015-06-08 22:09:09

标签: linux bash shell

我正在尝试在shell中执行一个随机时间段的脚本,然后调用python脚本。我这样做:

#!/bin/bash

now="$(date)"
printf "Current date and time %s\n" "$now"

maxdelay=25
delay=$(($RANDOM%maxdelay)) # pick an independent random delay for each of the 20 runs
echo $delay;
(sleep $((delay*60)); /usr/bin/python pythonscript.py) & 

但它失败了,结果就是这样:

Current date and time mar jun  9 00:02:10 CEST 2015
prueba.sh: 7: prueba.sh: arithmetic expression: expecting primary: "%maxdelay"

昨天它完美无缺,但今天我不知道为什么会失败

1 个答案:

答案 0 :(得分:9)

您似乎使用dash而非bash运行该脚本,可能是因为您正在调用脚本

sh prueba.sh

而不是

# prueba.sh must have exec permissions
# the shebang line is used to select the interpreter
./prueba.sh

bash prueba.sh

RANDOM是一个bash扩展名;在dash中,它并不特殊,默认情况下未分配。

在算术表达式中,如果使用$var并且var未分配,则它将替换为空字符串,这通常会产生语法错误。另一方面,如果您使用var并且var尚未分配值,则假定为0。

Debian和Ubuntu安装通常使用dash作为/bin/sh默认shell解释器。

请注意,bashdash会产生不同的错误消息:

$ bash -c 'unset foo;bar=25;echo $(($foo*$bar))'
bash: *25: syntax error: operand expected (error token is "*25")
$ dash -c 'unset foo;bar=25;echo $(($foo*$bar))'
dash: 1: arithmetic expression: expecting primary: "*25"