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

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

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

文件比较操作

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

命令参数含义
FILE1 -ef FILE2两个文件指向同一个inode,既是硬链接,则为真
FILE1 -nt FILE2FILE1比FILE2更新,既FILE1修改时间晚于FILE2,则为真
FILE1 -ot FILE2FILE1比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 filefile存在,并且为块特殊文件,则为真
-c filefile存在,并且为字符特殊文件,则为真
-d filefile存在,并且为目录,则为真
-e filefile存在,则为真
-f filefile存在,并且为常规文件,则为真
-g filefile存在,并且设置了文件的 SGID 位,则为真
-G filefile存在,并且为组所有,则为真
-r filefile存在,并且有读权限,则为真
-s filefile存在,并且长度大于0,则为真
-w filefile存在,并且有写权限,则为真
-x filefile存在,并且有执行权限,则为真

算术比较运算

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

操作符含义
num1 -eq num2两个数字相等,则为真
num1 -ge num2num1大于等于num2,则为真
num1 -gt num2num1大于num2,则为真
num1 -le num2num1小于等于num2,则为真
num1 -lt num2num1小于num2,则为真
num1 -ne num2num1不等于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 EXPRESSIONEXPRESSION表达式为真,则结果为真
test ! EXPRESSIONEXPRESSION表达式为假,则结果为真
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值