シェルスクリプトの私のコードは次のとおりです。
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
括弧の周りにスペースが必要であり、変数を引用する必要があります。