ファイルおよびディレクトリと相互作用するBashスクリプトで作業している場合、ファイルまたはディレクトリが存在することを確認する必要がある状況が発生する可能性があります。これにより、存在しないファイルに対して特定のアクションを実行する際に発生する可能性のあるエラーを回避できます。
このチュートリアルでは、ファイルまたはディレクトリがbashスクリプトに存在するかどうかを確認するいくつかの方法を紹介します。まずファイルから始めましょう。
ここでの考え方は、通常のファイル(ディレクトリではない)の場合にのみtrueを返す-f演算子を使用することです。
ファイル/home/ user/my_fileが存在するかどうかを確認するとします。角かっこで確認する方法は次のとおりです
#!/bin/bash
if [ -f /home/user/my_file ]
then
echo "My file exists"
fi
ただし、ファイル名を事前に取得できるとは限りませんね。変数に含めることができ、その場合は、この方法で使用できます。
#!/bin/bash
FILE=/home/user/my_file
if [ -f "$FILE" ]
then
echo "My file exists"
else
echo "My file doesn't exist"
fi
基本的に重要なのは、ifコマンドで使用する条件です。 ifステートメントをどのように使用するかはあなた次第です。
たとえば、2つの角かっこで記述し、次のようにセミコロンを使用して「then」を「if」と同じ行に保持できます。
#!/bin/bash
FILE=/home/user/my_file
if [ -f "$FILE" ]; then
echo "My file exists"
else
echo "My file doesn't exist"
fi
または、ステートメント全体を次のようにまとめます。
[ -f /home/user/my_file ] && echo "My file exists" || echo "My file doesn't exist"
また、bashでtestを使用して、ファイルが存在するかどうかを確認することもできます。 ifステートメントで角かっこを使用しないこととほとんど同じです:
#!/bin/bash
FILE=/home/user/my_file
if test -f "$FILE"
then
echo "My file exists"
else
echo "My file doesn't exist"
fi
上記のコードは、次のように1行で使用することもできます。
test -f /home/user/my_file && echo "My file exists" || echo "My file doesn't exist"
逆に、ファイルがbashに存在しないかどうかを確認したい場合はどうなりますか?否定演算子を使用すると、上記とほぼ同じコードを使用できます。
#!/bin/bash
FILE=/home/user/my_file
if [ ! -f "$FILE" ]
then
echo "My file doesn't exist"
fi
ファイルの処理方法がわかったところで、ディレクトリに移りましょう。
ディレクトリをチェックするためのコードは、前のセクションで見たものと同じです。唯一の違いは、-fの代わりに-dを使用することです。 -dはディレクトリに対してのみtrueを返します。
#!/bin/bash
if [ -d /home/user/my_dir ]
then
echo "My directory exists"
fi
ここでテストを使用することもできます:
#!/bin/bash
DIR=/home/user/my_dir
if test -d "$DIR"
then
echo "My directory exists"
else
echo "My directory doesn't exist"
fi
否定を再度使用して、ディレクトリが存在しないかどうかを確認できます。
#!/bin/bash
DIR=/home/user/my_dir
if [ ! -d "$DIR" ]
then
echo "My directory doesn't exist"
fi
それでおしまい。ファイルのディレクトリがbashシェルに存在するかどうかを確認するために必要なのはこれだけです。
このバッシュチップがお役に立てば幸いです。ご質問やご提案がございましたら、下にコメントを残してください。