シェルスクリプト(Bashスクリプト)で通常ファイルが存在した場合のみコマンドを実行するには、以下のように書きます。
#!/bin/bash
if [[ -f ~/path/to/file ]]; then
# 実行する処理、以下は例
ls -l ~/path/to/file
fi
通常ファイル以外の広義のファイル(ディレクトリやソケットなど)の場合は、「-f」で調べても「偽」となり、コマンドが実行されません。
ファイルタイプにかかわらず、存在すればコマンド実行する場合は「-e」を用います。
#!/bin/bash
if [[ -e ~/path/to/file ]]; then
# 実行する処理、以下は例
ls -l ~/path/to/file
fi
存在しない場合にコマンドを実行するには、以下のように書きます。
#!/bin/bash
if [[ ! -e ~/path/to/file ]]; then
# 実行する処理、以下は例
touch ~/path/to/file
fi
以下は、Bashのマニュアルページに記載されている、ファイル存在に関する条件式です。これらを組み合わせることで、ファイルの存在、非存在、種類に応じて処理を変えることができます。
-a file file が存在すれば真となります。 -b file file が存在し、かつブロック特殊ファイルならば真となります。 -c file file が存在し、かつキャラクター特殊ファイルならば真となります。 -d file file が存在し、かつディレクトリならば真となります。 -e file file が存在すれば真となります。 -f file file が存在し、かつ通常ファイルならば真となります。 -g file file が存在し、かつ set-group-id されていれば真となります。 -h file file が存在し、かつシンボリックリンクならば真となります。 -k file file が存在し、かつ ``sticky'' ビットが設定されていれば真となります。 -p file file が存在し、かつ名前付きパイプ (FIFO) ならば真となります。 -r file file が存在し、かつ読み込み可能ならば真となります。 -s file file が存在し、かつそのサイズが 0 より大きければ真となります。 -u file file が存在し、 かつ set-user-id ビットが設定されていれば真となります。 -w file file が存在し、かつ書き込み可能ならば真となります。 -x file file が存在し、かつ実行可能ならば真となります。 -G file file が存在し、かつ (実行中のシェルの) 実効グループ ID に所有されていれば真となります。 -L file file が存在し、かつシンボリックリンクならば真となります。 -N file file が存在し、 かつ前回読み込まれた以降に修正されていれば真となります。 -O file file が存在し、かつ (実行中のシェルの) 実効ユーザ ID に所有されていれば真となります。 -S file file が存在し、かつソケットならば真となります。