web-dev-qa-db-ja.com

ディレクトリに特定のファイルがあるかどうかを確認します

こんにちは、引数としてディレクトリへのパスを取得し、file.txtがディレクトリにあるかどうかを確認するifを実行しようとしています。

     if [ -e $1/file.txt ]; then
         exit 1
     else exit 0
     fi

また、私はlsメソッドを試しました

     ls $1/file.txt && exit 1 || exit 0

他の方法はありますか?または、何か不足していますか?

2
Dendarwx

スクリプトまたは関数の最初の引数として渡されたディレクトリにファイルfile.txtが存在するかどうかを確認するには、次のコマンドを使用します。

[ -e "$1/file.txt" ]

変数の置換を二重引用符で囲むことを忘れないでください

これは、ファイルが存在する場合は成功し、ファイルが存在しない場合は失敗します。失敗には、ファイルは存在するが到達できない場合も含まれます。ディレクトリを走査する権限がないためです。

シェルスクリプトでは、プロセスの終了ステータスに関して、0は成功を意味し、1(またはそれ以上、最大125)は失敗を意味することに注意してください。詳細については、 bash関数/スクリプトで使用できる戻り値/終了値は何ですか? および プロセスが終了したときのデフォルトの終了コード を参照してください。したがって、ファイルが存在するかどうかを確認する場合、スクリプトまたは関数は、ファイルが存在する場合は0を、そうでない場合は1を返す必要があります。スニペットは逆のことを行います。ファイルが存在しないかどうかを確認します。

 if [ -e "$1/file.txt" ]; then
    exit 0
 else
    exit 1
 fi

より複雑な書き方です

[ -e "$1/file.txt" ]
exit

exitにstatus引数を指定しないと、以前に実行されたコマンドのステータスが使用されます)。そして、これがスクリプトの最後にある場合、exitは冗長です。

ファイルが存在しないことを確認したい場合は、!シェル演算子を使用してコマンドを反転します。

! [ -e "$1/file.txt" ]

または!test/[演算子:

[ ! -e "$1/file.txt" ]