如何在if条件下使用expr

时间:2014-01-09 07:54:02

标签: linux bash shell command-line

我有以下条件:

STATUSFILE = "foo.status"
NEWTIME=1389253927
if [ -f $STATUSFILE ] && [ expr $NEW_TIME - cat $STATUSFILE -gt 3600 ]; then
    echo "foo"
fi;

我得到了::参数太多了

2 个答案:

答案 0 :(得分:5)

if的参数是一个unix命令。 [相当于testif的结果取决于该命令的返回状态。

因此,如果要测试命令的返回状态,则应删除[

如果要检查命令的输出(而不是其状态),则必须保留[并将命令放在$()中。

您的陈述应改写为:

if [ -f $STATUSFILE ] && [ $(expr $NEWTIME - $(cat $STATUSFILE)) -gt 3600 ]; then

更好的是使用由$(())提供的bash的算术功能:

if [ -f $STATUSFILE ] && [ $(($NEWTIME - $(cat $STATUSFILE) )) -gt 3600 ]; then

答案 1 :(得分:0)

使用foo $(expr 1 + 1)将命令expr 1 + 1的输出用作命令foo的参数。命令foo expr 1 + 1只运行foo,其中包含四个文字字符串expr1+1作为参数(我不能想象一个理智,明确的方式,它意味着其他任何东西)。