シェルスクリプトを作成するときに、ファイルが存在するかどうかに基づいてアクションを実行する必要がある状況に陥ることがよくあります。 。
Bashでは、testコマンドを使用して、ファイルが存在するかどうかを確認し、ファイルのタイプを判別できます。
testコマンドは、次のいずれかの構文形式を取ります。
スクリプトを移植可能にする場合は、古いテスト; then echo "$FILE exists."fi
ファイルが存在するかどうかに基づいて別のアクションを実行する場合if / then構文を使用します:
ファイルを処理する際の問題を回避するために、常に二重引用符を使用します名前に空白が含まれています。
ifステートメントなしでtestコマンドを使用することもできます。 &&演算子の後のコマンドは、テストコマンドの終了ステータスがtrueの場合にのみ実行されます。
必要に応じて&&演算子の後に一連のコマンドを実行するには、コマンドを;または&&:
&&の反対側、 ||演算子は、テストコマンドの終了ステータスがfalseの場合にのみ実行されます。
ディレクトリが存在するかどうかを確認する#
演算子-dを使用すると、ファイルがディレクトリかどうか。
たとえば、/etc/dockerディレクトリが存在するかどうかを確認するには、次を使用します。
二重括弧; then echo "$FILE does not exist."fi
上記と同じ:
複数のファイルが存在するかどうかを確認する#
複雑なネストされたif / else構造を使用する代わりに、-a(または&&と
IFステートメントを使用しない同等のバリアント:
ファイルテスト演算子#
testコマンドには、特定の種類のファイルをテストできる次のFILE演算子が含まれています。
-
-bFILE-FILEが存在し、特別なブロックファイルである場合はTrue。 -
-cFILE-True FILEが存在し、特殊文字ファイルである場合。 -
-dFILE-ファイルが存在し、ディレクトリである場合はTrue。 -
-eFILE-タイプ(ノード、ディレクトリ、ソケットなど)に関係なく、FILEが存在し、ファイルである場合はTrue。 -
-fFILE-FILEが存在し、通常のファイル(ディレクトリやデバイスではない)の場合はTrue。 -
-GFILE-ファイルが存在し、コマンドを実行しているユーザーと同じグループを持っている場合はTrue。 -
-hFILE-ファイルが存在し、シンボリックリンクである場合はTrue。 -
-gFILE-ファイルが存在し、set-group-id(sgid)フラグが設定されている場合はTrue。 -
-kFILE-ファイルが存在し、スティッキービットフラグが設定されている場合はTrue。 -
-L-ファイルが存在し、シンボリックリンクである場合はTrue。 -
-OFILE-ファイルが存在し、コマンドを実行しているユーザーが所有している場合はTrue。 -
-pFILE-場合はTrue FILEが存在し、パイプです。 -
-rFILE-FILEが存在し、読み取り可能である場合はTrue。 -
-SFILE-ファイルが存在し、ソケットである場合はTrue。 -
-sFILE-ファイルが存在し、サイズがゼロ以外の場合はTrue。 -
-uFILE-ファイルが存在し、set-user-id(suid)フラグが設定されている場合はTrue。 -
-wFILE-ファイルが存在し、書き込み可能である場合はTrue。 -
-xFILE-ファイルが存在し、exeである場合はTrueカット可能。
結論#
このガイドでは、ファイルまたはディレクトリがBashに存在するかどうかを確認する方法を示しました。