Мой код сценария оболочки следующие:
echo "Enter file name";
read fname;
if [-f$fname];
then
echo "File already exists";
fi`
Однако, когда я запускаю свой скрипт, я получаю эту ошибку:
[-ffile]: not found
Я попытался расположить с интервалами -f $fname
но я все еще получаю ту же ошибку. Почему это происходит и как я могу зафиксировать его?
Вы, возможно, добавили стоимость, которая содержит пространство. Чтобы предотвратить это, всегда указывайте свои переменные:
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!
Я ожидал бы -e "$fname"
, или if [[ -e $fname ]]
(последний не универсален через раковины).
Так
echo "Enter file name"; read fname; if [ -e "$fname" ]; then echo "File already exists"; fi
В любом случае и удостоверяться: всегда используйте кавычки ;)
Вот то, на что сценарий должен быть похожим
echo "Enter file name";
read fname;
if [ -f "$fname" ];
then
echo "File already exists";
fi
, Вы нуждаетесь в пространстве вокруг скобок и должны указать переменную.