bashスクリプトの作成中に、ファイルが存在するかどうかを確認する必要がある場合があります。それを使って何らかのアクションを実行します。 testコマンドを使用して、ファイルが存在するかどうか、およびそのタイプを確認できます。
このチュートリアルでは、Linuxベースのオペレーティングシステムにファイルが存在するかどうかを確認する方法を示します。
テストコマンドの基本構文
ファイルが存在するかどうかを確認するためのテストコマンドの基本構文は、次のとおりです。
test -e file
または
test -f file
場所:
- -e
このオプションは、タイプに関係なくファイルが存在するかどうかを確認します。 - -f
このオプションは、FILEが通常のファイルである場合にのみファイルが存在するかどうかを確認します。
次のようなテストコマンドのマニュアルページが表示されます。
man test
次の画面が表示されます。 :
コマンドラインを使用してファイルが存在するかどうかをテストする
このセクションでは、以下を示します。コマンドラインを使用してファイルが存在するかどうかを確認する方法:
次のコマンドを実行して、/ etc / fstabという名前のファイルが存在するかどうかを確認します(T rue):
test -f /etc/fstab
次に、次のコマンドを実行して、テストが成功するたびに終了コードを0または1に設定します。
echo $?
出力:
0
出力は0で、ファイル/ etc / fstabが存在することを意味します。
また、次のコマンドを使用して、ファイルが存在するかどうかを確認します。
echo $0
出力:
0
次に、次のコマンドを実行して、ファイル/ etc / fababが存在するかどうかをテストします( False)。
test -f /etc/fabab
echo $?
出力:
1
出力は1です。これは、ファイル/ etc / fababが存在しないことを意味します。
あなた以下に示すように、/ etc / rc.localという名前のファイルが存在するかどうか、またはbash条件付き実行を使用していないかどうかをテストすることもできます。
test -f /etc/rc.local && echo "Exists" || echo "Not Exists"
または
&& echo "Exists" || echo "Not Exists"
/etc/rc.localという名前のファイルが存在する場合は、次の出力が表示されます。
Exists
1つのコマンドを使用して、複数のファイルが存在するかどうかを確認することもできます。
&& echo "both files exist"
または
test -f /etc/passwd -a -f /etc/crontab && echo "both files exist"
次の出力が表示されます。
both files exist
ファイルがBashに存在するかどうかをテストする
このセクションでは、bashスクリプトを作成し、メッセージを出力してファイルが存在するかどうかを確認します。
test.shという名前のファイルを作成し、ファイルかどうかを確認します。 /etc/rc.localが存在するかどうか:
nano test.sh
次の行を追加します:
#!/bin/bash
FILE=/etc/rc.local
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
ファイルを保存して閉じ、次のコマンドでスクリプトを実行します。
bash test.sh
次の出力が表示されます。
The file "/etc/rc.local" exists.
次に、ファイルtest.shを作成し、ファイル/ etc /かどうかをテストします。 rc.localadは存在しません:
nano test.sh
次の行を追加します:
#!/bin/bash
FILE=/etc/rc.localad
if ; then
echo "The file "$FILE" exists."
else
echo "The file "$FILE" is not exists."
fi
ファイルを保存して閉じ、次のコマンドでスクリプトを実行します。
bash test.sh
次の出力が表示されます。
The file "/etc/rc.localad" is not exists.
ファイルが存在するかどうかを確認し、bashスクリプトでそのファイルに対して何らかのアクションを実行することもできます。
たとえば、/ etc / hostsという名前のファイルを見つけて、そのファイルが存在する場合は/ optディレクトリにコピーします。
これを行うには、test.shという名前のファイルを作成します。
nano test.sh
次の行を追加します:
FILE=/etc/hosts
if ; then
cp $FILE /opt
fi
ファイルを保存して閉じ、次のコマンドを使用してスクリプトを実行します。
次に、次のコマンドを使用して/ optディレクトリをテストします。
ls /opt/hosts
次の出力にhostsファイルが表示されます。
/opt/hosts
式を使用することもできます!ファイルが存在しないかどうかを確認します。
たとえば、次のコマンドを実行して、ファイル/ etc / hostingが存在しないかどうかを確認します。
&& echo "File does not exist"
または
test ! -f /etc/hosting && echo "File does not exist"
次の出力が表示されます。
File does not exist
ディレクトリが存在するかどうかをテストする
-dオプションを使用して、ディレクトリが存在するかどうかを確認することもできます。
たとえば、ディレクトリ/ etc / apache2が存在するかどうかを確認します。
&& echo "Directory is exists"
または
test -d /etc/apache2 && echo "Directory is exists"
次の出力が表示されます。
Directory is exists
条件式を使用してbashスクリプトを作成し、ディレクトリが存在するかどうかを確認することもできます。
次のようにtest.shという名前のファイルを作成します。
nano test.sh
次の行を追加します。
終了したら、ファイルを保存して閉じます。次に、次のコマンドを使用して適切な権限を付与します。
chmod 755 test.sh
次に、ディレクトリ/ etc / nginxが使用可能かどうかをテストします。次のコマンドを使用します。
./test.sh /etc/nginx
次の出力が表示されます。
Directory /etc/nginx/ exists.
次に、次のコマンドを使用して、ディレクトリ/ etc / linuxが使用可能かどうかをテストします。
./test.sh /etc/linux
次の出力が表示されます。
Directory /etc/linux does not exists
Bashのファイルテスト演算子
次のファイルテスト演算子は、「ファイル」が存在し、特定のタイプがあるかどうかを確認するのに役立ちます。
- -b
FILEが存在し、ブロック特殊です - -c
FILEが存在し、文字特殊です - -d
FILEが存在し、ディレクトリ - -e
ファイルが存在します - -f
ファイルが存在し、通常のファイルです - -g
ファイルが存在し、 set-group-ID - -G
FILE ex有効なグループIDによって所有されています - -h
FILEが存在し、シンボリックリンクです(-Lと同じ) - -k
FILEが存在し、そのスティッキービットセット - -L
FILEが存在し、シンボリックリンクです(-hと同じ) - -O
FILEが存在し、有効なユーザーが所有していますID - -p
FILEが存在し、名前付きパイプです - -r
FILEが存在し、読み取り権限が付与されています - -s
FILEが存在し、サイズがゼロより大きい - -S
FILEが存在し、ソケットである - -u
FILEが存在し、そのset-user-IDビット設定されている - -w
FILEが存在し、書き込み権限が付与されている - -x
FILEが存在し、実行(または検索)権限が付与されている