test – 条件式を評価するコマンド
制御構文(条件・ループ) 2025.08.21
test コマンドは、指定した 条件式を評価し、その結果を終了ステータスで返す コマンドです。
出力は何もせず、真なら終了ステータス 0、偽なら 1 を返します。シェルスクリプトの条件分岐(if 文など)で利用されます。
構文(Syntax)
test EXPRESSION
または、シェル構文として
[ EXPRESSION ]
[[ EXPRESSION ]] # bash, zsh 拡張
主な条件式一覧
文字列に関する条件
| 条件式 | 意味 | 使用例 |
|---|
-z STRING | 文字列が空なら真 | test -z "$var" |
-n STRING | 文字列が空でなければ真 | test -n "$var" |
STRING1 = STRING2 | 文字列が等しい | test "$a" = "$b" |
STRING1 != STRING2 | 文字列が異なる | test "$a" != "$b" |
整数に関する条件
| 条件式 | 意味 | 使用例 |
|---|
INT1 -eq INT2 | 等しい | test 5 -eq 5 |
INT1 -ne INT2 | 等しくない | test 5 -ne 3 |
INT1 -gt INT2 | より大きい | test 5 -gt 3 |
INT1 -ge INT2 | 以上 | test 5 -ge 5 |
INT1 -lt INT2 | より小さい | test 3 -lt 5 |
INT1 -le INT2 | 以下 | test 3 -le 5 |
ファイルに関する条件
| 条件式 | 意味 | 使用例 |
|---|
-e FILE | ファイルが存在する | test -e file.txt |
-f FILE | 通常ファイルなら真 | test -f file.txt |
-d DIR | ディレクトリなら真 | test -d /tmp |
-r FILE | 読み取り可能なら真 | test -r file.txt |
-w FILE | 書き込み可能なら真 | test -w file.txt |
-x FILE | 実行可能なら真 | test -x script.sh |
FILE1 -nt FILE2 | FILE1 が FILE2 より新しい | test file1 -nt file2 |
FILE1 -ot FILE2 | FILE1 が FILE2 より古い | test file1 -ot file2 |
論理演算
| 条件式 | 意味 | 使用例 |
|---|
! EXPR | 否定 | test ! -f file.txt |
EXPR1 -a EXPR2 | AND(かつ) | test -f file -a -r file |
EXPR1 -o EXPR2 | OR(または) | test -f file -o -d file |
実行例
文字列が空かどうか判定
test -z ""
echo $? # 0 (真)
数値比較
test 5 -gt 3
echo $? # 0 (真)
test 2 -eq 3
echo $? # 1 (偽)
ファイルの存在確認
test -e /etc/passwd
echo $? # 0 (存在する)
test -e /notfound
echo $? # 1 (存在しない)
if 文で利用
if test -f "/etc/passwd"; then
echo "File exists"
fi
[ を使った記法
if [ -d "/tmp" ]; then
echo "Temp dir exists"
fi
[[ を使った拡張条件(bash, zsh)
if [[ "$USER" == a* ]]; then
echo "Username starts with 'a'"
fi
エラー例(スペース不足)
[ -f/etc/passwd ]
出力:
bash: [: missing `]'
関連コマンド
[ : test のシンタックスシュガー(同義コマンド)[[ : bash/zsh の拡張版、パターンマッチなど強力な比較が可能expr : 式の評価や計算を行う
備考
test はシェル組み込みコマンドとしても外部コマンドとしても存在しますが、通常は組み込み版が利用されます。[ コマンドは test の別名ですが、最後に ] を必ず置く必要があります。- POSIX 互換性を重視するなら
test または [ を、bash 専用スクリプトなら [[ ]] を使うのが一般的です。
参考
コメント