【bash】シェルスクリプトでファイルやディレクトリの存在を確認する
Linuxのbashシェルスクリプトを使ってファイルを出力したり、入力したい場合、
ファイルがそもそも存在してない場合はエラーとなる。
そこでエラーが発生しないように、ファイルを読み込むまたは出力の前に、
ファイルやディレクトリの存在確認をしてから読み込み処理を組み込むと良いです。
以下がその確認を行うシェルスクリプトとなります。
尚、以下例では「$1」 は引数としてファイル名が入ります。
<使い方>
以下のコードを「test.sh」等で保存。
「chmod 755 test.sh」として実行権限を付与。
「./test.sh [確認したいファイル名]」としてみてください。
ファイルが存在するかどうか調べる
コマンドの引数として使う場合は以下
#!/bin/bash
if [ -f "$1" ]; then
echo "$1 exists"
else
echo "$1 not exists"
fi
変数に含める場合は以下(※引数とせず、確認したいファイルのパスを変数に含める方法です。)
#!/bin/bash
CHECK_DIR=/var/log/dbbackup.log
if [ -f "$CHECK_DIR" ]; then
echo "$CHECK_DIR exists"
else
echo "$CHECK_DIR not exists"
fi
ディレクトリが存在するかどうか調べる
上記のファイル存在確認と同様で、「-f」が「-d」となるのみの変更です。
なのでこれはセットで覚えておくと良いと思います。
#!/bin/bash
if [ -d "$1" ]; then
echo "$1 exists"
else
echo "$1 not exists"
fi
応用編:ファイルなのかディレクトリなのか調べる
今度は「-e」と「-d」を組み合わせて使います。
「-e」はファイル、ディレクトリ、デバイス含めて存在を確認するオプションです。
#!/bin/bash
if [ -e "$1" ]; then
if [ -d "$1" ]; then
echo "$1 is dir"
else
echo "$1 is file"
fi
else
echo "$1 not exists"
fi
前回の読み込む処理と合わせて、
何かしらのBashスクリプト作成の際に参考になれば幸いです。
筆者の場合はデータベースのバックアップやスクリプト実行時のログ出力などで利用する機会が多いものです。