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コマンドの実行例 |
|
文字列を比較する場合の例です。
|
# 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
# 左の数値が右の数値以上かを判定するには、-ge を使用します。
[root@vm-01 ~]#
test 1 -ge 1 ; echo $?
0
# 左の数値が右の数値以下かを判定するには、-le を使用します。
[root@vm-01 ~]#
test 1 -le 1 ; echo $?
0
# 左の数値が右の数値より大きいかを判定するには、-gt を使用します。
[root@vm-01 ~]#
test 1 -gt 1 ; echo $?
1
# 左の数値が右の数値より小さいかを判定するには、-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
# 左のファイルが右のファイルより更新日時が新しいかを判定するには、-nt を使用します。
[root@vm-01 ~]#
test file1 -nt file3 ; echo $?
1
# 左のファイルが右のファイルより更新日時が古いかを判定するには、-ot を使用します。
[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コマンドの結果に応じて後続の処理を実行するには、||や&&を使用します。
- && : 前のコマンドが成功(終了ステータス0)した場合のみ、次のコマンドを実行します。
- || : 前のコマンドが失敗(終了ステータス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
[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コマンドの代表的なオプションと実行例を紹介しました。
||や&&と組み合わせることで、条件に応じた処理の分岐が簡潔に記述できます。
シェルスクリプトでの条件分岐にぜひ活用してみてください。