#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)