@ Cyrusのコメントによると、あなたのコードはhttp://shellcheck.netで実行されました。結果は次のとおりです。
#!/usr/bin/bash
echo -n "Enter filename: "
read -r fileToFind
if [ -z "$fileToFind" ]
then
echo "Error! No filename entered"
else
fileSearch=$(locate -i "$fileToFind")
if [ "$fileSearch" ]
then
echo "$fileSearch"
else
echo "No such file"
fi
fi
このWebページの構文ハイライトに注意してください。あなたのコードには赤/マゼンタがたくさんあります。これはあなたがどこかで引用符を閉じていないことを示しています。あなたの質問に今
:私はその名前を持つ任意のファイル が発見された場合はtrueを返し、コマンドラインにそれを印刷し、if文を実装しようとしている
...
ここに興味のあるスタイルがあります:実行中のコマンドが0の終了コードを返す(つまり正常に返る)なら、ifステートメントは真と評価されます。 locate(私の大規模な研究に基づいてhttps://linux.die.net/man/1/locateに基づいて)の場合、ファイルが返された場合、locateは呼び出しを成功と見なします。 locateは結果をコマンドライン(またはLinux用語ではstdout)に出力します。で結果この場合
# other code omitted for focus/brevity
if
! locate -i "$fileToFind"
then
echo "No such file"
fi
、私は否定しました:言ったことすべては、あなたがこのような文があれば再書くことができます!。したがって、locateがファイルを見つけることに失敗すると、プログラムは "No such file"を出力します。 locateがファイルを見つけたら、locateをstdoutに出力します。
このコードを書くのわずかterser方法があり:上記の文で
locate -i "$fileToFind" || echo "No such file"
は、論理ORを評価するためにはbashを求めている、||短絡論理を持つ。式が真であれば、bashは文の実行を停止します。したがって、上記の場合、locateが成功してファイルが見つかると、||の後にbashは正しい式を実行しません。これは書くのが楽しい簡潔なイディオムですが、他人が理解するのが少し難しいかもしれません。if文は、通常、あなたのロジックをより明確に表現し、その場合はそれに固執します。
ご覧ください:http://www.shellcheck.net/ – Cyrus