if 命令语法

if 命令语法

我的shell脚本代码如下:

echo "Enter file name";
read fname;
if [-f$fname];
then
    echo "File already exists";
fi`

但是,当我运行脚本时,出现此错误:

[-ffile]: not found

我尝试了间距-f $fname,但仍然出现相同的错误。为什么会发生这种情况?我该如何修复?

答案1

您可能添加了包含空格的值。为防止这种情况,请始终用引号括住变量:

if [ -f "$fname" ]

另外,请注意[]周围需要一个空格。为什么?因为[是一个命令,所以它必须用空格与前面的语句隔开。您可以通过输入 来阅读它man test

全部一起:

echo "Enter file name";
read -r fname;
if [ -f "$fname" ]; then
   echo "File already exists";
fi

查看关于引号如何重要的测试:

$ touch "a b"
$ filename="a b"
$ [ -f $filename ] && echo "exists!"
bash: [: a: binary operator expected
$ [ -f "$filename" ] && echo "exists!"
exists!

答案2

我希望-e "$fname"if [[ -e $fname ]](最后一个在各个 shell 中不是通用的)。

所以

echo "Enter file name"; read fname; if [ -e "$fname" ]; then echo "File already exists"; fi

无论如何,要确保:始终使用引号;)

答案3

脚本如下所示

echo "Enter file name";
read fname;
if [ -f "$fname" ];
then 
  echo "File already exists";
fi

括号周围需要有空格,并且应该引用变量。

相关内容