Bash文件存在检查缺失]

时间:2014-03-15 17:13:09

标签: linux bash

我正在尝试在我的bash脚本中进行简单的文件存在检查:

FILE_TO_CHECK=/home/username/path/to/file

if [ ! -f $FILE_TO_CHECK]; #line 9 in actual script
then
    echo File not found.
fi

对我来说似乎很简单,但我收到以下错误,我不知道原因:

/path/to/script: line 9: [: missing `]'

我不是一个bash专家,但我很确定在这种情况下不需要反击。是什么给了什么?

2 个答案:

答案 0 :(得分:7)

在结束]之前缺少空格。

你必须明白[是一个命令,跟随它的一切,直到;,都是它的参数。命令[期望其最后一个参数为]。但是如果省略空格,那么]将成为前一个参数的最后一个字符。

似乎[ ]if语法的一部分。事实并非如此。 <{1}}必须跟随任何命令,if评估其退出状态。

if

在上面的行中if true; then foo; fi 也是一个命令。

true

$ which true /bin/true 是一个命令,其唯一目的是始终具有真(0)退出状态。

答案 1 :(得分:2)

您也可以尝试:

if (test ! -f $FILE_TO_CHECK);

if !(test -f $FILE_TO_CHECK);

因为[test命令的简写。