我正在尝试在我的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专家,但我很确定在这种情况下不需要反击。是什么给了什么?
答案 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
命令的简写。