ほとんどの場合、ファイルが存在するかどうかをチェックするアクションを実行する必要がある場合があります。
Bashでは、「テストコマンド」を使用して、ファイルが存在するかどうかを確認し、ファイルの種類を判別できます。
テストコマンドの構文は次のとおりです。次のコマンドのいずれかを使用できます。
スクリプトをすべてのPOSIXシェルに移植できるようにするには、単一のブラケット「[」コマンドを使用する必要があります。テストコマンドのアップグレードバージョンには、Bash、Zsh、およびKshをデフォルトシェルとして使用する最新のシステムのほとんどでサポートされている二重角かっこ「[[」が含まれています。
ファイルが存在するかどうかを確認する
ファイルが存在するかどうかを確認するときに、最も一般的に使用されるファイル演算子は-eと-fです。 「-e」オプションは、タイプに関係なくファイルが存在するかどうかを確認するために使用され、「-f」オプションは、ファイルが通常のファイル(ディレクトリやデバイスではない)の場合にのみtrue値を返すために使用されます。
ファイルが存在するかどうかを確認する最も一般的なオプションは、「if条件付きステートメント」でtestコマンドを使用することです。
以下は、「read_file」かどうかを確認する例です。 txt “ファイルが存在します:
方法1
方法2
方法3
出力
ディレクトリにファイル(read_file.txt)が存在するため、3つのメソッドすべての出力は次のようになります。
read_file.txt exist
ファイルが存在するかどうかに基づいて結果を提供するアクションを実行する場合は、if / then構文を使用できます。次の方法:
例
出力
read_file.txt exist
ifステートメントなしでtestコマンドを使用することもできます。次のいずれかの方法を使用できます。
方法1
方法2
方法3
出力
ディレクトリにファイル(read_file.txt)が存在するため、3つのメソッドすべての出力は次のようになります。
read_file.txt exist
例
& &、||の後のステートメント演算子は、テストコマンドの終了ステータスが「false」の場合にのみ実行されます。
例
出力
read_file.txt exist
これらは、ファイルが存在するかどうかを確認するためにBashで一般的に使用される方法です。
ディレクトリが存在するかどうかを確認する
演算子「-d」を使用すると、ファイルがディレクトリであるかどうかをテストできます。
「Javatpoint」ディレクトリが存在するかどうかを確認する方法は次のとおりです。
方法1
方法2
注:単一の括弧「[」の代わりに二重の括弧「[[」を使用することもできます。 。
出力
指定された場所にディレクトリ(Javatpointという名前)が存在するため、上記の両方のメソッドの出力は次のようになります。
Javatpoint is a directory
IFファイルが存在しないことを確認する
感嘆符(!-logical NOT演算子)を使用すると、テスト式を否定できます。次の例を確認してください。
例
上記のスクリプトは、次のように記述することもできます。
出力
missing_read_file.txt unavailable
ファイルテスト演算子
テストコマンドには、次のファイル演算子が含まれています。特定の種類のファイルをテストします。
-b FileReturns | ファイルが特別なブロックとして存在する場合は「True」 file。 |
-c FileReturns | FILEが特殊文字ファイルとして存在する場合は「True」。 |
-d FileReturns | FILEがディレクトリとして存在する場合は “True”。 |
-e FileReturns | “True “タイプ(ノード、ディレクトリ、ソケットなど)に関係なく、FILEがファイルとして存在する場合。 |
-f FileReturns | ” True ” FILEが通常のファイル(ディレクトリやデバイスではない)として存在する場合。 |
-G FileReturns | FILEが存在し、ユーザーが通信を実行しているのと同じグループおよび。 |
-h FileReturns | FILEがシンボリックリンクとして存在する場合は「True」。 |
-g FileReturns | FILEが存在し、set-group-id(sgid)フラグが設定されている場合は「True」。 |
-k FileReturns | FILEが存在し、スティッキービットフラグが設定されている場合は「True」。 |
-L FileReturns | 「True」の場合FILEはシンボリックリンクとして存在します。 |
-O FileReturns | FILEが存在し、コマンドを実行しているユーザーが所有している場合は「True」。 |
-p FileReturns | FILEがパイプとして存在する場合は「True」。 |
– r FileReturns | FILEが読み取り可能なファイルとして存在する場合は「True」。 |
-S FileReturns | 「True」の場合FILEはソケットとして存在します。 |
-s FileReturns | FILEが存在し、サイズがゼロ以外の場合は「True」。 |
-u FileReturns | FILEが存在し、set-user-id(suid)フラグが設定されている場合は「True」。 |
-w FileReturns | FILEが書き込み可能ファイルとして存在する場合は “True”。 |
-x FileReturns | FILEが書き込み可能ファイルとして存在する場合は “True” 実行可能ファイル。 |