条件記述 (Bourne Shell)

シェルの条件記述

Bourne Shell をはじめとした各種シェルで記述できる条件記述の一覧です.

POSIX 準拠の test コマンドやその糖衣構文 [ 条件式 ] で利用できる記述です. 1

bash
if [ condition ]
then
    echo "true"
else
    echo "false"
fi

数値比較

条件式内容
A -eq BA と B が等しいEQual
A -ne BA と B が等しくないNot Equal
A -gt BA が B よりも大きいGreater Than
A -ge BA が B 以上Greater than or Equal
A -lt BA が B よりも小さいLess Than
A -le BA が B 以下Less than or Equal

文字列比較

条件式内容
S1 = S2S1 と S2 が等しい
S1 != S2S1 と S2 が等しくない
-n SS の長さが 0 より大きい
-z SS の長さが 0 である

パス特性

条件式内容
F1 -nt F2F1 の最終更新時刻が F2 よりも新しいNewer Than
F1 -ot F2F1 の最終更新時刻が F2 よりも古いOlder Than
F1 -ef F2F1 と F2 の Device, inode が同一 (ハードリンク)Equal File
-e Path指定したパスが存在しているExists
-d Path指定したパスが存在している かつ ディレクトリであるDirectory
-f Path指定したパスが存在している かつ ファイルであるFile
-r Path指定したパスが存在している かつ 読取権限を有しているReadable
-w Path指定したパスが存在している かつ 書込権限を有しているWritable
-x Path指定したパスが存在している かつ 実行権限を有しているeXecutable
-s Path指定したパスが存在している かつ サイズが 0 よりも大きいファイルであるSized
-S Path指定したパスが存在している かつ Socket ファイルであるSocket
-L Path指定したパスが存在している かつ シンボリックリンクであるLink
-k Path指定したパスが存在している かつ Sticky Bit が設定されているsticKy
-u Path指定したパスが存在している かつ SUID が設定されているset User id
-g Path指定したパスが存在している かつ SGID が設定されているset Group id

条件結合

条件式内容
! Condition条件を満たさない
C1 -a C2両方の条件を満たすAnd
C1 -o C2どちらかの条件を満たすOr

-a, -o については, 現在 test コマンドの用法としてはあまり推奨されていません. 単一の test コマンドの結合として記述するのではなく, 複数の test コマンドを &&/|| でつなぐ形で表現することが推奨されています.

bash
# obsolescent
test conditionA -a conditionB
if [ conditionA -a conditionB ]; then echo "true" ; fi

test conditionA -o conditionB
if [ conditionA -o conditionB ]; then echo "true" ; fi

# recommended
test conditionA && test conditionB
if [ conditionA ] && [ conditionB ]; then echo "true"; fi

test conditionA || test conditionB
if [ conditionA ] || [ conditionB ]; then echo "true"; fi
参考文献
  1. test(1p) posix man page