「シェルスクリプトの基礎 - ファイルとディレクトリ」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動

2020年10月8日 (木) 12:04時点における版

概要

シェルスクリプトでファイルやディレクトリが存在しているかを確認する方法を記載する。
ここでは、確認するためにif文を使用している。


ファイルの存在を確認

ファイルが存在する場合

if文の演算子で、-eを使用することでファイルが存在することを確認することができる。
以下のシェルスクリプトでは、test.txtファイルが存在するか確認して、ファイルが存在する場合、File exists.と表示する。

 #!/bin/bash
 
 FILE="test.txt"
 
 if [ -e $FILE ]; then
    echo "File exists."
 fi


ファイルが存在しない場合

上記と逆の場合、ファイルが存在しないことを確認する場合、演算子に!を付加することで結果を反転させることができる。
つまり、! -eと記述することで、ファイルが存在しない場合に真となる。
以下のシェルスクリプトでは、test.txtファイルが存在しない場合に、File not exists.と表示する。

 #!/bin/bash
 
 FILE="test.txt"
 
 if [ ! -e $FILE ];then
    echo "File not exists."
 fi



ディレクトリの存在を確認

ディレクトリが存在する場合

if文の演算子で、-dを使用することでディレクトリが存在することを確認することができる。
以下のシェルスクリプトでは、testディレクトリが存在する場合、Directory exists.と表示する。

 #!/bin/bash
 
 DIR="test"
 
 if [ -d $DIR ];then
    echo "Directory exists."
 fi


ディレクトリが存在しない場合

上記と逆の場合、ディレクトリが存在しないことを確認する場合、演算子に!を付加することで結果を反転させることができる。
つまり、! -dと記述することで、ディレクトリが存在しない場合に真となる。
以下のシェルスクリプトでは、testディレクトリが存在しない場合に、Directory not exists.と表示する。

 #!/bin/bash
 
 DIR="test"
 
 if [ ! -d $DIR ];then
    echo "Directory not exists."
 fi



その他の演算子

下表に、ファイルやディレクトリの存在を確認する際に、使用できる演算子を記載する。

表. 演算子

演算子 説明
-a ファイル ファイルがあれば真
-b ファイル ファイルがありブロックス特殊ファイルであれば真
-c ファイル ファイルがありキャラクター特殊ファイルであれば真
-d ファイル ファイルがありディレクトリであれば真
-e ファイル ファイルがあれば真
-f ファイル ファイルがあり通常のファイルであれば真
-g ファイル ファイルがありSGID(特殊なアクセス権)であれば真
-G ファイル ファイルがあり実行グループIDによる所有者であれば真
-h ファイル ファイルがありシンボリックであれば真(-Lと同じ)
-k ファイル ファイルがありステッキービットが設定されていれば真
-L ファイル ファイルがありシンボリックであれば真(-hと同じ)
-O ファイル ファイルがあり実行ユーザIDによる所有者であれば真
-p ファイル ファイルがあり名前付きパイプであれば真
-r ファイル ファイルがあり読み取り可能であれば真
-s ファイル ファイルがありサイズが0より大きければ真
-S ファイル ファイルがありソケットであれば真
-t FD FD(ファイルディスクリプタ)が端末でオープンされていれば真
-u ファイル ファイルがありSUID(特殊なアクセス権)であれば真
-w ファイル ファイルがあり書き込み可能であれば真
-x ファイル ファイルがあり実行可能であれば真