概要
条件式を評価し、真なら0、偽なら1を返します。シェルスクリプトの分岐やファイル存在確認で使う重要な基本部品です。
基本構文
test 条件式
[ 条件式 ]詳細解説
testは、文字列比較、数値比較、ファイル存在確認、権限確認などの条件判定を行うためのコマンドです。出力ではなく終了ステータスで結果を返すため、if、while、&&、||と相性が良く、シェルスクリプトの基礎になります。
多くのシェルでは組み込みとして実装され、[ という書き方も同じ系統の機能です。
このコマンドを使う場面
ifやwhileで条件分岐したい時、ファイルの有無や種類を確認したい時、変数が空かどうかを判定したい時、数値の大小比較をしたい時に使います。
まず安全に試す方法
1. test -d /etc; echo $?
2. test 3 -gt 2; echo $?
3. file="/etc/passwd"; test -f "$file"; echo $?
3分ミッション
少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。
-
test -fとtest -dを使い分けて、ファイルとディレクトリを判定します。
資格試験との関連
-
LinuC レベル1
範囲: 1.06 シェルスクリプト根拠: officialLinuCレベル1では、シェルスクリプトの作成、条件判定、入力処理が問われます。testはその基礎部品として重要です。
-
LPIC-1
範囲: 105.2 簡単なスクリプトをカスタマイズする根拠: officialLPIC-1では、単純なシェルスクリプトの分岐と入力処理が出題対象です。testはその基本構成要素です。
-
共通基礎
範囲: Linuxコマンド基礎根拠: editorial試験横断で、testはコマンドライン操作、手順読解、トラブルシュートの基礎体力を作る項目です。
実行結果サンプル
-
test -f /etc/passwd; printf "%sn" $?
戻り値コード
- 0 条件が真です。
- 1 条件が偽です。
- >1 構文誤りなどで評価自体に失敗しました。
使用例
test -f /etc/passwd[ -d /var/log ]test "$USER" = roottest 10 -gt 3
よくあるエラー
-
変数が空の時に構文エラーになった 原因: 引用していないため引数数が崩れています。対処: test "$var" = valueのように変数を引用します。
導入・互換性情報
POSIXはtestと[を定義しています。Bashの[[ ... ]]は便利ですが別物です。移植性を求めるスクリプトでは混同しないでください。
- Debian GNU/Linux / 13 / Bash 5.2.37
注意点 / セキュリティリスク
引用不足や空文字の扱いを誤ると条件判定が壊れます。特に変数が空の時や空白を含む時に不具合が起こりやすいため、変数は原則として引用します。
FAQ
-
Q. [ とtestは同じですか。 A. ほぼ同系統ですが、[ は最後に ] を必要とします。
関連用語
参照リンク
- カテゴリー: Shell And Cli
- シェル依存: Posix Sh
- レベル: Basic
- 対応試験: LinuC, LinuC レベル1, LPIC, LPIC-1, 共通基礎