如何在if条件下使用expr

Ka *_* Rl 3 linux bash shell command-line

我有以下条件:

STATUSFILE = "foo.status"
NEWTIME=1389253927
if [ -f $STATUSFILE ] && [ expr $NEW_TIME - cat $STATUSFILE -gt 3600 ]; then
    echo "foo"
fi;
Run Code Online (Sandbox Code Playgroud)

我得到了::太多的论点

mou*_*iel 5

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

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

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

您的陈述应改写为:

if [ -f $STATUSFILE ] && [ $(expr $NEWTIME - $(cat $STATUSFILE)) -gt 3600 ]; then
Run Code Online (Sandbox Code Playgroud)

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

if [ -f $STATUSFILE ] && [ $(($NEWTIME - $(cat $STATUSFILE) )) -gt 3600 ]; then
Run Code Online (Sandbox Code Playgroud)