test – 条件式を評価するコマンド

制御構文(条件・ループ)

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 FILE2FILE1 が FILE2 より新しいtest file1 -nt file2
FILE1 -ot FILE2FILE1 が FILE2 より古いtest file1 -ot file2

論理演算

条件式意味使用例
! EXPR否定test ! -f file.txt
EXPR1 -a EXPR2AND(かつ)test -f file -a -r file
EXPR1 -o EXPR2OR(または)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 専用スクリプトなら [[ ]] を使うのが一般的です。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント