我正在尝试在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"
昨天它完美无缺,但今天我不知道为什么会失败
答案 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解释器。
请注意,bash
和dash
会产生不同的错误消息:
$ 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"