если синтаксис команды

Мой код сценария оболочки следующие:

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

Однако, когда я запускаю свой скрипт, я получаю эту ошибку:

[-ffile]: not found

Я попытался расположить с интервалами -f $fname но я все еще получаю ту же ошибку. Почему это происходит и как я могу зафиксировать его?

3
задан 19 October 2015 в 12:27

3 ответа

Вы, возможно, добавили стоимость, которая содержит пространство. Чтобы предотвратить это, всегда указывайте свои переменные:

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!
9
ответ дан 1 December 2019 в 13:01

Я ожидал бы -e "$fname", или if [[ -e $fname ]] (последний не универсален через раковины).

Так

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

В любом случае и удостоверяться: всегда используйте кавычки ;)

4
ответ дан 1 December 2019 в 13:01

Вот то, на что сценарий должен быть похожим

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

, Вы нуждаетесь в пространстве вокруг скобок и должны указать переменную.

0
ответ дан 1 December 2019 в 13:01

Другие вопросы по тегам:

Похожие вопросы: