ホームページ > 運用・保守 > Linuxの運用と保守 > Bash にファイルまたはディレクトリが存在するかどうかを確認する方法

Bash にファイルまたはディレクトリが存在するかどうかを確認する方法

青灯夜游
リリース: 2019-03-22 16:33:49
オリジナル
4874 人が閲覧しました

シェル スクリプトを作成するときは、ファイルが存在するかどうかに基づいて操作を実行する必要があることがよくあります。では、ファイルが存在するかどうかを確認するにはどうすればよいでしょうか?以下の記事では、test コマンドを使用して Bash にファイルやディレクトリが存在するかどうかを確認する方法を紹介しますので、ご参考になれば幸いです。

Bash にファイルまたはディレクトリが存在するかどうかを確認する方法

テスト コマンド

Bash では、テスト コマンドを使用してファイルが存在するかどうかを確認できます。ファイルが存在するかどうかを確認します。

test コマンドは、次のいずれかの構文形式を取ります:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
ログイン後にコピー

スクリプトを移植可能にしたい場合は、すべての POSIX シェルで使用できる古い test [ コマンドを使用することをお勧めします。テスト コマンド [[ (二重括弧) の新しいアップグレードされたバージョンは、デフォルト シェルとして bash、zsh、および ksh を使用するほとんどの最新システムでサポートされています。

テスト コマンドのファイル演算子

テスト コマンドには次のファイル演算子が含まれており、特定の種類のファイルをテストできます:

● -b FILE: FILE が存在し、それがブロック特殊ファイルの場合は True。

##● -c FILE: FILE が存在し、それが特殊文字ファイルの場合は True。

##● -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 が存在し、サイズが 0 以外の場合は True。

##● -u FILE: 存在し、set-user-id (suid) フラグが設定されている場合は True。

##● -w FILE: FILE が存在し、書き込み可能な場合は true。

##● -x FILE: FILE が存在し、実行可能な場合は True。

ファイルが存在するかどうかを確認するにはどうすればよいですか?

ファイルが存在するかどうかを確認する場合、最も一般的に使用される FILE 演算子は -e と -f です。最初の演算子は、ファイルの種類に関係なくファイルが存在するかどうかをチェックし、2 番目の演算子は、ファイルが通常のファイル (ディレクトリまたはデバイスではない) の場合にのみ true を返します。

ファイルが存在するかどうかを確認する場合、最も読みやすいオプションは、test コマンドを if ステートメントと組み合わせて使用​​することです。次のコード スニペットは、/etc/resolv.conf ファイルが存在するかどうかをチェックします:

FILE=/etc/resolv.conf
if test -f "$FILE"; then
    echo "$FILE exist"
fi
ログイン後にコピー
FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exist"
fi
ログイン後にコピー
FILE=/etc/resolv.conf
if [[ -f "$FILE" ]]; then
    echo "$FILE exist"
fi
ログイン後にコピー

ファイルが存在するかどうかに基づいてさまざまなアクションを実行したい場合は、if/then 構造を使用するだけです:

FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exist"
else 
    echo "$FILE does not exist"
fi
ログイン後にコピー

注:

名前にスペースが含まれるファイルを扱うときは、問題を避けるために常に二重引用符を使用してください。

if ステートメントを使用せずに test コマンドを使用することもできます。 && 演算子の後のコマンドは、テスト コマンドの終了ステータスが true の場合にのみ実行されます。

test -f /etc/resolv.conf && echo "$FILE exist"
ログイン後にコピー
[ -f /etc/resolv.conf ] && echo "$FILE exist"
ログイン後にコピー
[[ -f /etc/resolv.conf ] && echo "$FILE exist"
ログイン後にコピー
&& 演算子の後に一連のコマンドを実行する場合は、コマンドを「;」で囲むだけです。または、中括弧内で「&&」で区切ります。
[ -f /etc/resolv.conf ] && { echo "$FILE exist"; cp "$FILE" /tmp/; }
ログイン後にコピー
& とは異なり、 || 演算子に続くステートメントは、テスト コマンドの終了ステータスが false の場合にのみ実行されます。
[ -f /etc/resolv.conf ] && echo "$FILE exist" || echo "$FILE does not exist"
ログイン後にコピー

ディレクトリが存在するかどうかを確認するにはどうすればよいですか?

-d 演算子を使用すると、ファイルがディレクトリであるかどうかをテストできます。

たとえば、/etc/docker ディレクトリが存在するかどうかを確認するには、次のコマンドを使用する必要があります。

FILE=/etc/docker
if [ -d "$FILE" ]; then
    echo "$FILE is a directory"
fi
ログイン後にコピー
[ -d /etc/docker ] && echo "$FILE is a directory"
ログイン後にコピー

同様に、単一の括弧 [ の代わりに二重括弧 [[ を使用することもできます。

ファイルが存在しないことを確認するにはどうすればよいですか?

他の多くの言語と同様に使用できます。 (感嘆符) テスト式を否定する論理 NOT 演算子:

FILE=/etc/docker
if [ ! -f "$FILE" ]; then
    echo "$FILE exist and it is a directory"
fi
ログイン後にコピー
上と同じ:

[ ! -f /etc/docker ] || echo "$FILE does not exist"
ログイン後にコピー

複数のファイルが存在するかどうかを確認するには?

複数のファイルが存在する場合、複雑なネストされた if/else 構造を使用する代わりに、-a (または &&with[]) を使用してテストできます。

FILE=/etc/docker
if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then
    echo "$FILE is a directory"
fi
ログイン後にコピー
FILE=/etc/docker
if [ -f /etc/resolv.conf && -f /etc/hosts ]; then
    echo "$FILE is a directory"
fi
ログイン後にコピー
なしの同等のバリアントIF ステートメント:
[ -f /etc/resolv.conf -a -f /etc/hosts ] && echo "both files exist"
ログイン後にコピー
[[ -f /etc/resolv.conf && -f /etc/hosts ]] && echo "both files exist"
ログイン後にコピー
推奨される関連ビデオ チュートリアル: 「
Linux チュートリアル 」

上記がこの記事の全内容です。お役に立てば幸いです。皆様の学習にお役に立てれば幸いです。さらにエキサイティングなコンテンツについては、PHP 中国語 Web サイトの関連チュートリアルのコラムに注目してください。 ! !

以上がBash にファイルまたはディレクトリが存在するかどうかを確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート