Você pode ter adicionado um valor que contenha um espaço. Para evitar isso, sempre cite suas variáveis:
if [ -f "$fname" ]
Além disso, observe que [
e ]
precisam de um espaço ao redor. Por quê? Como [
é um comando, ele deve ser separado por um espaço em branco da instrução anterior. Você pode ler sobre isso digitando man test
.
Todos juntos:
echo "Enter file name";
read -r fname;
if [ -f "$fname" ]; then
echo "File already exists";
fi
Veja um teste sobre como as cotações são importantes:
$ touch "a b"
$ filename="a b"
$ [ -f $filename ] && echo "exists!"
bash: [: a: binary operator expected
$ [ -f "$filename" ] && echo "exists!"
exists!