このエントリーをはてなブックマークに追加


if文のサンプルシェルスクリプト・ファイル・ディレクトリ編

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


スポンサーリンク

ディレクトリかどうか調べる

ディレクトリかどうかは、-dオプションを利用します。

以下のサンプルシェルスクリプトは、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ブロックの処理は実行されていないのがわかります。

ファイルでもディレクトリでも存在しているかどうかを調べる

ファイルでもディレクトリでも存在しているかどうかのチェックは、-eオプションを利用します。
以下のサンプルシェルスクリプトは、fooディレクトリとbarファイルを作成し、-eオプションで有無確認を行い、その内部ブロックでディレクトリなのかファイルなのかを確認しています。

#/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.

ファイルが存在しているかどうかを確認する

上記の例で既に記述していますが、-fオプションによりファイル(ディレクトリを除く)の有無を確認することができます。
以下のサンプルシェルスクリプトファイルは、fooファイルを作成し-fオプションでファイルの有無を確認しています。
途中、-dオプションを利用してディレクトリかどうかを確認しています。
次に、fooファイルを削除し!を利用しfooファイルが存在しない場合、if ... fiが実行されるようになっています。

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

関連記事


スポンサーリンク


添付ファイル: filechk_dir_file.sh 252件 [詳細] filechk_dir.sh 355件 [詳細] filechk_file.sh 293件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:27:06 (1156d)