linux shell编程学习--test测试比较命令

在linux shell编程使用的过程中,难免会遇到一些测试和比较问题。shell提供了test命令,方便进行测试比较操作。test不仅可以测试逻辑表达式,还可以进行文件,数字,字符串的比较。本文是一些常见用法的学习总结。

在介绍test命令之前,先简单介绍下shell命令的返回值含义。在shell中,如果命令返回0,则表示成功;任何非0的返回值,都表示失败;同时shell提供了特殊参赛$?来获取上个命令的返回值。

文件比较操作

test命令,支持文件比较操作。主要可以比较两个文件是否为同一个文件,两个文件修改时间的先后。

命令参数 含义
FILE1 -ef FILE2 两个文件指向同一个inode,既是硬链接,则为真
FILE1 -nt FILE2 FILE1比FILE2更新,既FILE1修改时间晚于FILE2,则为真
FILE1 -ot FILE2 FILE1比FILE2更旧,既FILE1修改时间早于FILE2,则为真

在下面的例子中,分别有三个文件,其中file2.txt是file1.txt的硬链接。

shuanghu@shuanghu:test_command$ls -l
-rw-rw-r-- 2 shuanghu shuanghu    0  514 12:21 file1.txt
-rw-rw-r-- 2 shuanghu shuanghu    0  514 12:21 file2.txt
-rw-rw-r-- 1 shuanghu shuanghu    0  514 12:22 file3.txt

shuanghu@shuanghu:test_command$ test file1.txt -ef file2.txt ;echo $?
1
shuanghu@shuanghu:test_command$ test file1.txt -ef file3.txt ;echo $?
0
shuanghu@shuanghu:test_command$ test file1.txt -nt file3.txt;echo $?
0
shuanghu@shuanghu:test_command$ test file1.txt -ot file3.txt ;echo $?
1

文件属性操作

test命令可以判断文件是否存在,以及侦测各种的文件属性。

命令参数 含义
-b file file存在,并且为块特殊文件,则为真
-c file file存在,并且为字符特殊文件,则为真
-d file file存在,并且为目录,则为真
-e file file存在,则为真
-f file file存在,并且为常规文件,则为真
-g file file存在,并且设置了文件的 SGID 位,则为真
-G file file存在,并且为组所有,则为真
-r file file存在,并且有读权限,则为真
-s file file存在,并且长度大于0,则为真
-w file file存在,并且有写权限,则为真
-x file file存在,并且有执行权限,则为真

算术比较运算

在shell中,test命令可以比较两个数字的大小,相等等。

操作符 含义
num1 -eq num2 两个数字相等,则为真
num1 -ge num2 num1大于等于num2,则为真
num1 -gt num2 num1大于num2,则为真
num1 -le num2 num1小于等于num2,则为真
num1 -lt num2 num1小于num2,则为真
num1 -ne num2 num1不等于num2,则为真

使用例子如下:

shuanghu@shuanghu:tmp$ test 1 -eq 2 ;echo $?
1
shuanghu@shuanghu:tmp$ test 1 -ge 2 ;echo $?
1
shuanghu@shuanghu:tmp$ test 1 -gt 2 ;echo $?
1
shuanghu@shuanghu:tmp$ test 1 -le 2 ;echo $?
0
shuanghu@shuanghu:tmp$ test 1 -lt 2 ;echo $?
0
shuanghu@shuanghu:tmp$ test 1 -ne 2 ;echo $?
0

字符串比较运算

shell中,test命令,也可以进行字符串的比较。包括判断字符串是否为空,大于,小于,等于等常见操作。
具体shell中字符串的操作,可以详细见本人的另外一篇博客《shell编程学习–字符串的使用操作》

逻辑运算

test可以进行基本的逻辑运算

表达式 含义
test EXPRESSION EXPRESSION表达式为真,则结果为真
test ! EXPRESSION EXPRESSION表达式为假,则结果为真
test EXPRESSION1 -a EXPRESSION2 逻辑与,EXPRESSION1与EXPRESSION2都为真,结果为真
test EXPRESSION1 -o EXPRESSION2 逻辑或,EXPRESSION1与EXPRESSION2有一个为真,结果为真
shuanghu@shuanghu:tmp$ test 1 -lt 2 ;echo $?
0
shuanghu@shuanghu:tmp$ test ! 1 -gt 2 ;echo $?
0
shuanghu@shuanghu:tmp$ test  1 -lt 2 -a 2 -eq 2;echo $?
0
shuanghu@shuanghu:tmp$ test  1 -lt 2 -o 2 -ne 2;echo $?
0

你可能感兴趣的:(linux,shell)