シェルプログラムにおけるif文+testコマンドの記述法

shなどのシェルプログラム内では結構if文の条件としてtestコマンドを活用することが多いと思うので簡単な記述法を記載。



作成日:2008.7.30
更新日:2008.7.30

主なオプション(演算子)
主に使いそうなオプションの一覧です。
これ以外にもいくつかありますが詳しくは"man test"を参照してください。
オプション(演算子) 内容
-d file file が存在していてディレクトリであれば真
-e file file が存在すれば真
-f file file が存在していて通常ファイルであれば真
-n string string の長さが 0 より大きければ真
-p file file が名前つきパイプであれば真
-r file file が存在していて読み込み可能であれば真
-s file file が存在していてファイルサイズが 0 より大きければ真
-w file file が存在していて書き込みフラグが立っていれば真
-x file file が存在していて実行可能フラグが立っていれば真
-z string string の長さが 0 であれば真
-L file file が存在していてシンボリックリンクの場合に真になります。
file1 -nt file2 file1 が存在していて file2 よりも新しい場合に真
file1 -ot file2 file1 が存在していて file2 よりも古い場合に真
string string が空文字列(NULL)でなければ真
s1 = s2 文字列 s1 と s2 が同じであれば真
s1 != s2 文字列 s1 と s2 が異なっていれば真
n1 -eq n2 整数 n1 と n2 が等しければ真(n1 = n2)
n1 -ne n2 整数 n1 と n2 が等しくなければ真(n1 != n2)
n1 -gt n2 整数 n1 が n2 がより大きければ真(n1 > n2)
n1 -ge n2 整数 n1 が n2 以上であれば真(n1 >= n2)
n1 -lt n2 整数 n1 が n2 より小さければ真(n1 < n2)
n1 -le n2 整数 n1 が n2 以下であれば真(n1 <= n2)

ページのトップへ

オプション(演算子)の組み合わせ
組み合わせ 内容
! 演算子 演算子の結果の逆(結果が偽ならば真)
演算子1 -a 演算子2 演算子1と演算子2が両方とも真であれば真
演算子1 -o 演算子2 演算子1と演算子2のいずれか一方が真であれば真
ページのトップへ

記述例
■"/usr/local/etc/unknown"がディレクトリかファイルかを確認する
if [ -d "/usr/local/etc/unknown" ]
then
    ~指定したパスがディレクトリだった場合~
elif [ -f "/usr/local/etc/unknown" ]
then
    ~指定したパスがファイルだった場合~
else
    ~どちらでもない場合(例外)~
fi

■変数varが"str1"か"str2"のいずれかであるかを確認する
if [ "${var}" == "str1" -o "${var}" == "str2" ]
then
    ~条件があった場合~
else
    ~合わなかった場合~
fi

ページのトップへ