No.010シェル

test

テスト・条件式評価

知識レベル 基礎安全に試せる一般ユーザーで使えるシェルに組み込み別名 [

条件式を評価し、真なら0、偽なら1を返します。シェルスクリプトの分岐やファイル存在確認で使う重要な基本部品です。

答えよく使う形

  1. 通常ファイルが存在するので真です
  2. 通常ファイルが存在するか判定します
  3. ディレクトリが存在するか判定します
visitor@goodly: ~

$ test -f /etc/passwd; printf "%sn" $?

0

$ test -f /etc/passwd

$ [ -d /var/log ]

覚える順番の中でLPIC-1・46 駅め / 106

どんなコマンド?

こんなときに

ifやwhileで条件分岐したい時、ファイルの有無や種類を確認したい時、変数が空かどうかを判定したい時、数値の大小比較をしたい時に使います。

testは、文字列比較、数値比較、ファイル存在確認、権限確認などの条件判定を行うためのコマンドです。出力ではなく終了ステータスで結果を返すため、if、while、&&、||と相性が良く、シェルスクリプトの基礎になります。

多くのシェルでは組み込みとして実装され、[ という書き方も同じ系統の機能です。

書き方とオプション

組み立ててみるオプションを押すと、下の1行に足されます。もう一度押すと外れます。

$ test

使用例と実行結果

行を押すとコピーできます。

0
通常ファイルが存在するので真です。

まず安全に試す

3分ミッション

手を動かすと覚えやすくなります。できたものに印を付けてください(この端末に残ります)。

0 / 1

つまずいたとき

変数が空の時に構文エラーになった

原因引用していないため引数数が崩れています。

こうするtest "$var" = valueのように変数を引用します。

終わったときの数(戻り値)

$ echo $?

  • 0条件が真です。
  • 1条件が偽です。
  • >1構文誤りなどで評価自体に失敗しました。

気をつけることと入れ方

気をつけること

引用不足や空文字の扱いを誤ると条件判定が壊れます。特に変数が空の時や空白を含む時に不具合が起こりやすいため、変数は原則として引用します。

シェル(bash など)に組み込まれたコマンドです。入れるものはありません。

環境による違い

POSIXはtestと[を定義しています。Bashの[[ ... ]]は便利ですが別物です。移植性を求めるスクリプトでは混同しないでください。

確かめた環境Debian GNU/Linux / 13 / Bash 5.2.372026-04-09 に確認

よくある質問

[ とtestは同じですか。

ほぼ同系統ですが、[ は最後に ] を必要とします。

資格試験では

  • LinuC レベル1大事1.06 シェルスクリプトLinuCレベル1では、シェルスクリプトの作成、条件判定、入力処理が問われます。testはその基礎部品として重要です。
  • LPIC-1大事105.2 簡単なスクリプトをカスタマイズするLPIC-1では、単純なシェルスクリプトの分岐と入力処理が出題対象です。testはその基本構成要素です。
  • 共通基礎大事Linuxコマンド基礎

test を最後まで読みました。

Linux コマンド辞典に戻る118 / 144

Goodly のメニュー