se a sintaxe do comando

3

Meu código de script de shell é o seguinte:

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

No entanto, quando executo meu script, recebo este erro:

[-ffile]: not found

Eu tentei espaçar -f $fname , mas ainda recebo o mesmo erro. Por que isso está acontecendo e como posso corrigi-lo?

    
por Prachi 19.10.2015 / 11:12

3 respostas

9

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!
    
por fedorqui 19.10.2015 / 11:17
4

Eu esperaria -e "$fname" ou if [[ -e $fname ]] (o último não é universal em shells).

Então

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

Em qualquer caso e para ter certeza: use sempre aspas;)

    
por Rinzwind 19.10.2015 / 11:18
0

Veja como o script deve ser

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

Você precisa de espaço ao redor dos parênteses e deve citar a variável.

    
por DevRobot 19.10.2015 / 11:23