#navi(../)

* if文のサンプルシェルスクリプト・ファイル・ディレクトリ編 [#n6517588]
bashを利用しif .. then .. fi を利用し、ファイルおよびディレクトリの有無を調べるサンプルシェルスクリプトを以下に記します。

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)


* ディレクトリかどうか調べる [#mc843b66]
ディレクトリかどうかは、''-d''オプションを利用します。
#ref(chk_dir.sh)
以下のサンプルシェルスクリプトは、fooディレクトリを作成し、''-d''オプションを使用してディレクトリの有無を確認しています。~
途中、''-f''オプションを利用してファイルかどうかを確認しています。~
次に、fooディレクトリを削除し''!''を利用しfooディレクトリが存在しない場合、if ... fiが実行されるようになっています。
 #/bin/bash
 
 mkdir foo
 if [ -d foo ]; then
   echo "foo directory found."
 fi
 
 if [ -f foo ]; then
   echo "foo file found."
 fi
 
 rmdir foo
 if [ ! -d foo ]; then
   echo "foo directory not found."
 fi
-実行結果
 $ chmod +x chk_dir.sh 
 $ ./chk_dir.sh 
 foo directory found.
 foo directory not found.
実行結果の出力からわかるように、ディレクトリの有無は''-d''オプションで確認できます。~
また、ファイルでは無いので''-f''オプションのif ... fiブロックの処理は実行されていないのがわかります。

* ファイルでもディレクトリでも存在しているかどうかを調べる [#q473f710]
ファイルでもディレクトリでも存在しているかどうかのチェックは、''-e''オプションを利用します。~
以下のサンプルシェルスクリプトは、fooディレクトリとbarファイルを作成し、''-e''オプションで有無確認を行い、その内部ブロックでディレクトリなのかファイルなのかを確認しています。
#ref(chk_dir_file.sh)
 #/bin/bash
 
 mkdir foo
 touch bar
 
 if [ -e foo ]; then
   echo "foo found."
   if [ -d foo ]; then
     echo "foo is directory."
   fi
   if [ -f foo ]; then
     echo "foo is file."
   fi
 fi
 
 if [ -e bar ]; then
   echo "bar found."
   if [ -d bar ]; then
     echo "bar is directory."
   fi
   if [ -f bar ]; then
     echo "bar is file."
   fi
 fi
 
 rmdir foo
 rm bar
- 実行結果
 $ chmod +x chk_dir_file.sh 
 $ ./chk_dir_file.sh 
 foo found.
 foo is directory.
 bar found.
 bar is file.

* ファイルが存在しているかどうかを確認する [#z3143d75]
上記の例で既に記述していますが、''-f''オプションによりファイル(ディレクトリを除く)の有無を確認することができます。~
以下のサンプルシェルスクリプトファイルは、fooファイルを作成し''-f''オプションでファイルの有無を確認しています。~
途中、''-d''オプションを利用してディレクトリかどうかを確認しています。~
次に、fooファイルを削除し''!''を利用しfooファイルが存在しない場合、if ... fiが実行されるようになっています。
#ref(chk_file.sh)
 #/bin/bash
 
 touch foo
 if [ -f foo ]; then
   echo "foo file found."
 fi
 
 if [ -d foo ]; then
   echo "foo directory found."
 fi
 
 rm foo
 if [ ! -f foo ]; then
   echo "foo file not found."
 fi

* 関連記事 [#f8f90509]
- [[if文のサンプルシェルスクリプト・数値比較編>逆引きシェルスクリプト/if文のサンプルシェルスクリプト・数値比較編]]
-[[if文の条件式でand, or, notを使う方法>逆引きシェルスクリプト/if文の条件式でand, or, notを使う方法]]
-[[ファイルのパーミッションを確認する方法>逆引きシェルスクリプト/ファイルのパーミッションを確認する方法]]
-[[シンボリックリンクかどうか判別する方法>逆引きシェルスクリプト/シンボリックリンクかどうか判別する方法]]
-[[ファイルサイズが0より大きいかを確認する>逆引きシェルスクリプト/ファイルサイズが0より大きいかを確認する]]
-[[case…esacのサンプルシェルスクリプト>逆引きシェルスクリプト/case…esacのサンプルシェルスクリプト]]

#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS