目次:
多くの場合、シェルスクリプトを記述するときに、ファイルが存在するかどうかに基づいてアクションを実行する必要がある状況に陥ることがあります。
Bashでは、testコマンドを使用して、ファイルが存在するかどうかを確認し、ファイルのタイプを判別できます。
testコマンドは、次の構文形式のいずれかを取ります。
ファイルが存在するかどうかを確認
ファイルが存在するかどうかを確認する場合、最も一般的に使用されるFILE演算子は
-e
と
-f
です。 最初のものはタイプに関係なくファイルが存在するかどうかをチェックし、2番目のものはFILEが通常のファイル(ディレクトリまたはデバイスではない)の場合にのみtrueを返します。
ファイルが存在するかどうかを確認する際に最も読みやすいオプションは、ifコマンドと組み合わせてtestコマンドを使用することです。 以下のスニペットは、/
/etc/resolv.conf
ファイルが存在するかどうかを確認します。
FILE=/etc/resolv.conf if test -f "$FILE"; then echo "$FILE exist" fi
FILE=/etc/resolv.conf if; then echo "$FILE exist" fi
FILE=/etc/resolv.conf if]; then echo "$FILE exist" fi
ファイルが存在するかどうかに基づいて異なるアクションを実行する場合は、単純にif / thenコンストラクトを使用します。
FILE=/etc/resolv.conf if; then echo "$FILE exist" else echo "$FILE does not exist" fi
名前に空白を含むファイルを処理するときの問題を回避するために、常に二重引用符を使用します。
ifステートメントなしでtestコマンドを使用することもできます。
&&
演算子の後のコマンドは、テストコマンドの終了ステータスがtrueの場合にのみ実行されます。
test -f /etc/resolv.conf && echo "$FILE exist"
&& echo "$FILE exist"
] && echo "$FILE exist"
&& { echo "$FILE exist"; cp "$FILE" /tmp/; }
&&
反対、
||
後のステートメント 演算子は、テストコマンドの終了ステータスが
false
場合にのみ実行され
false
。
&& echo "$FILE exist" || echo "$FILE does not exist"
ディレクトリが存在するかどうかを確認します
演算子
-d
使用すると、ファイルがディレクトリかどうかをテストできます。
たとえば、
/etc/docker
ディレクトリが存在するかどうかを確認するには、次を使用します。
FILE=/etc/docker if; then echo "$FILE is a directory" fi
&& echo "$FILE is a directory"
また、二重括弧を使用することもできます
, 'linuxize_com-medrectangle-4', 'ezslot_7', 160, '0', '0']));
ファイルが存在しないかどうかを確認します
他の多くの言語と同様に、テスト式は
!
を使用して否定できます
!
(感嘆符)論理否定演算子:
FILE=/etc/docker if; then echo "$FILE does not exist" fi
同上:
&& echo "$FILE does not exist"
複数のファイルが存在するかどうかを確認します
複雑なネストされたif / elseコンストラクトを使用する代わりに、
-a
(または
&&
を使用して
; then echo "$FILE is a directory" fi
を使用できます
; then echo "$FILE is a directory" fi
FILE=/etc/docker if; then echo "$FILE is a directory" fi
IFステートメントを使用しない同等のバリアント:
&& echo "both files exist"
ファイルテスト演算子
testコマンドには、特定の種類のファイルをテストできる次のFILE演算子が含まれています。
-
-b
FILE
-FILEが存在し、ブロックスペシャルファイルである場合はtrue。-c
FILE
-FILEが存在し、特殊文字ファイルである場合は真。-d
FILE
-FILEが存在し、ディレクトリである場合はtrue。-e
FILE
-FILEが存在し、タイプ(ノード、ディレクトリ、ソケットなど)に関係なくファイルである場合はtrue。-f
FILE
-FILEが存在し、通常のファイル(ディレクトリまたはデバイスではない)である場合はtrue。-G
FILE
-FILEが存在し、コマンドを実行しているユーザーと同じグループを持っている場合はtrue。-h
FILE
-FILEが存在し、シンボリックリンクである場合はtrue。-g
FILE
-FILEが存在し、set-group-id(sgid)フラグが設定されている場合はtrue。-k
FILE
-FILEが存在し、スティッキービットフラグが設定されている場合はtrue。-L
FILE
-FILEが存在し、シンボリックリンクである場合はtrue。-O
FILE
-FILEが存在し、コマンドを実行しているユーザーが所有している場合はtrue。-p
FILE
-FILEが存在し、パイプである場合はtrue。-r
FILE
-FILEが存在し、読み取り可能な場合はtrue。-S
FILE
-FILEが存在し、ソケットである場合はtrue。-s
FILE
-FILEが存在し、サイズがゼロでない場合は真。-u
FILE
が存在し、set-user-id(suid)フラグが設定されている場合はtrue。-w
FILE
-FILEが存在し、書き込み可能な場合はtrue。-x
FILE
-FILEが存在し、実行可能であれば真。
結論
このガイドでは、Bashを使用してファイルまたはディレクトリが存在するかどうかを確認する方法を示しました。
バッシュターミナル