Linuxの条件判定に使えるtestコマンドのオプションや利用方法の例

Others,Rocky Linux/CentOS

testコマンドの概要、オプション一覧、実行例です。
&&や||を組み合わせて、testコマンドの実行結果に応じて後続の処理を実行する例も紹介しています。

※確認には、Rocky Linux release 9.6 (Blue Onyx)の環境を利用しています。

スポンサーリンク

testコマンドの概要、オプション、コマンド実行例、組み合わせて利用する方法

testコマンドとは?

主に条件判定に利用されるコマンドです。
シェルスクリプトなどでも使用され、if文やwhile文などと組み合わせて使われることが多いコマンドです。
指定した条件が真の場合は終了ステータス0(成功)、偽の場合は1(失敗)を返します。

なお、testコマンド単体では標準出力には何も表示されません。
結果を確認するには、echo $?で終了ステータスを確認します。

testコマンドのオプションと実行例

testコマンドのオプションと実行例です。
testコマンドは、文字列の比較、数値の比較、ファイルの存在確認などを行うことができます。

testコマンドの実行例

文字列を比較する場合の例です。

# 2つの文字列を比較して、等しいという条件にしたい場合は、=オプション を使用します。
[root@vm-01 ~]# test string1 = string1 ; echo $?
0
[root@vm-01 ~]# test string1 = string2 ; echo $?
1
# 2つの文字列を比較して、等しくないという条件にしたい場合は、!=オプション を使用します。
[root@vm-01 ~]# test string1 != string1 ; echo $?
1
[root@vm-01 ~]# test string1 != string2 ; echo $?
0

数値を比較する場合の例です。

# 2つの数値を比較して、等しいという条件にしたい場合は、-eqオプション を使用します。
[root@vm-01 ~]# test 1 -eq 1 ; echo $?
0
# 2つの数値を比較して、等しくないという条件にしたい場合は、-neオプション を使用します。
[root@vm-01 ~]# test 1 -ne 1 ; echo $?
1
# 2つの数値を比較して、以上という条件にしたい場合は、-geオプション を使用します。
[root@vm-01 ~]# test 1 -ge 1 ; echo $?
0
# 2つの数値を比較して、以下という条件にしたい場合は、-leオプション を使用します。
[root@vm-01 ~]# test 1 -le 1 ; echo $?
0
# 2つの数値を比較して、より大きいという条件にしたい場合は、-gtオプション を使用します。
[root@vm-01 ~]# test 1 -gt 1 ; echo $?
1
# 2つの数値を比較して、より小さいという条件にしたい場合は、-ltオプション を使用します。
[root@vm-01 ~]# test 1 -lt 1 ; echo $?
1

ファイルを比較する場合の例です。
今回の場合、file1とfile2は同じinode番号を持っています。
また、file3はfile1よりも更新日付が新しいです。

# testコマンド実行環境です。
[root@vm-01 ~]# ls -i 
8391677 file1
8391677 file2
8391953 file3
[root@vm-01 ~]# ls -l 
-rw-r–r–. 2 root root 0 Oct 25 04:53 file1  
-rw-r–r–. 2 root root 0 Oct 25 04:53 file2 
-rw-r–r–. 1 root root 0 Oct 25 04:57 file3

# 2つのファイルを比較して、同じinode番号を持つという条件にしたい場合は、-efオプション を使用します。
[root@vm-01 ~]# test file1 -ef file2 ; echo $?
0
# 2つのファイルを比較して、更新日付が新しい場合という条件にしたい場合は、-ntオプション を使用します。
[root@vm-01 ~]#
test file1 -nt file3 ; echo $?
1
# 2つのファイルを比較して、更新日付が古い場合という条件にしたい場合は、-ntオプション を使用します。
[root@vm-01 ~]#
test file1 -ot file3 ; echo $?
0

ファイルやディレクトリを確認する場合の例です。

# testコマンド実行環境です。
[root@vm-01 ~]#
ls -l
drwxr-xr-x. 2 root root 6 Oct 25 05:19 dir
-rw-r–r–. 2 root root 0 Oct 25 04:53 file1

# ファイルが存在するという条件にしたい場合は、-fオプション を使用します。
[root@vm-01 ~]# test -f file1 ; echo $?
0
# ファイルが存在しかつサイズが0より大きいという条件にしたい場合は、-sオプション を使用します。
[root@vm-01 ~]# test -s file1 ; echo $?
1
# ディレクトリが存在するという条件にしたい場合は、-dオプション を使用します。
[root@vm-01 ~]#
test -d dir ; echo $?
0
# ファイルかディレクトリが存在するという条件にしたい場合は、-eオプション を使用します。
[root@vm-01 ~]# test -e file1 ; echo $?
0
[root@vm-01 ~]# test -e dir ; echo $?
0

# ファイルへの書き込みが可能という条件にしたい場合は、-wオプション を使用します。
[root@vm-01 ~]# test -w file1 ; echo $?

0
# ファイルの読み取りが可能という条件にしたい場合は、-rオプション を使用します。
[root@vm-01 ~]# test -r file1 ; echo $?
0
# ファイルの実行が可能という条件にしたい場合は、-xオプション を使用します。
[root@vm-01 ~]# test -x file1 ; echo $?
1

※代表的なオプションの例を紹介しています。その他にも使用できるオプションがあります。詳しくはman testでご確認ください。

||や&&と組み合わせて利用する場合の例(testコマンドの結果に応じて処理を実行)

前のコマンドの実行結果に応じて、次のコマンドを連続して実行する場合は、||や&&を使用します。
||は前の処理が失敗した場合に次のコマンドを実行し、&&は前の処理が成功した場合のみ次のコマンドを実行します。
これらを組み合わせることで、testコマンドの実行結果によって後続の処理を実行するかどうか判断させることができます。

testコマンドの実行例

# ファイルの存在を確認して、存在しない場合のみファイルを新規に作成します。
[root@vm-01 ~]# ls -l
drwxr-xr-x. 2 root root 6 Oct 25 05:19 dir
-rw-r–r–. 2 root root 0 Oct 25 04:53 file1

[root@vm-01 ~]# test -f new_file || touch new_file
[root@vm-01 ~]# ls -l
drwxr-xr-x. 2 root root 6 Oct 25 05:19 dir
-rw-r–r–. 2 root root 0 Oct 25 04:53 file1
-rw-r–r–. 1 root root 0 Oct 25 05:32 new_file

# コマンドを実行しているユーザーIDを確認して、root場合のみpasswdファイルを参照する。
[root@vm-01 ~]# test “$(id -u)" -eq 0 && cat /etc/passwd
root:x:0:0:root:/root:/bin/bash

idコマンドについては、こちらで紹介しています。

—広告—

最後に

今回はtestコマンドのオプション一覧と、コマンドの実行例についてまとめました。
また、||や&&をtestコマンドと組み合わせることで、testコマンドの実行結果に応じて後続のコマンドを実行するかどうかを判断できることが分かりました。

引き続き、いろいろ試してみたいと思います。

スポンサーリンク