我的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
括号周围需要有空格,并且应该引用变量。