test命令,测试字符串,文件状态,数字等是否符合我们的需要。
test命令适用于对文件、字符串、数字的检测。
对于测试输出结果,可以使用$?检测,0表示返回正确,1表示返回错误。
test命令格式:
test condition 或[ condition ]
一、下面是测试文件的状态表
—————————–
-d 目录
-f 正规文件
-L 符号链接
-r 可读
-s 文件长度大于0、非空
-w 可写
-u 文件有suid位设置
-x 可执行
—————————–
检查文件week.txt,是否可写,和执行。
ls -l week.txt
-rw-r–r– 1 b4nx group 94 Dec 11 10:14 week.txt
1.检查是否具有写的权限:
[ -w week.txt ] 或 test -w week.txt
echo $?
0
2.检查是否具有可执行权限:
[ -x week.txt ] 或 test -x week.txt
echo $?
1
文件不可执行。
3.检查可读权限:
test -r iplist.txt
echo $?
0
4.检查文件是否为空:
ls -l file.null
-rw-r–r– 1 b4nx group 0 Dec 28 08:38 file.null
test -s file.null
echo $?
1
1表示否,文件为空或长度为0
5.检查文件是否为连接文件:
ln ../awk/data.f ldata
ls -l data.f
-rw-r–r– 2 b4nx group 356 Nov 16 19:50 data.f
创建的是link文件,怎么这里显示的是普通文件呢?
原来创建文件时少写了参数:-s
rm -r ldata
ln -s ../awk/data.f ldata
ls -l ldata
lrwxrwxrwx 1 b4nx group 13 Dec 28 08:58 ldata -> ../awk/data.f
查看是否为link文件:
[ -L ldata ]
echo $?
0
week.txt文件未普通文件,所以检查是返回1:
test -L week.txt
echo $?
1
ls -l week.txt
-rw-r–r– 1 b4nx group 94 Dec 11 10:14 week.txt
6.检测目录
[ -d other ]
echo $?
0
cd other
pwd
***/other
使用逻辑操作符
-a:逻辑与,一假则假
-o:逻辑或,一真则真
1.查看2个文件是否都可写
[ -w video.txt -a -w video2.txt ]
echo $?
0
ls -l video*
-rw-r–r– 1 b4nx group 195 Dec 10 18:47 video.txt
-rw-r–r– 1 b4nx group 195 Dec 11 09:02 video2.txt
查看2个文件是否都为link文件:
[ -L video.txt -o -L video2.txt ]
echo $?
1
二、字符串检测,有5种格式:
1.test “str”
2.test operator “str”
3.test “str” operator “str”
4.[ operator str ]
5.[ str operator str ]
operator有如下几种:
= :两字符串相等
!= :两字符串不等
-z :空串
-n :非空串
1.等于操作符
STR1=”echo”
STR2=”echo1″
[ $STR1 = $STR2 ]
echo $?
1
[ “a” = “a” ]
echo $?
0
2.不等于操作符
[ $STR1 != $STR2 ]
echo $?
0
3.检查是否为空串,或者字符串是否存在
[ -z $STR5 ]
echo $?
1
STR5实际不存在,所以结果为1。
4.检查非空字符串
[ -n $STR1 ]
echo $?
0
三、数值检测:判断2个数字的大小关系,格式:
“num1” operator “num2”
[ “num1” operator “num2”]
operator类似数学操作符:
-eq:数值相等
-ne:数值不等
-gt:num1大于num2
-lt:num1小于num2
-le:num1小于等于num2
-ge:num1大于等于num2
1.两个数字是否相等
[ “304” -eq “304” ]
echo $?
0
[ “304” -ne “304” ]
echo $?
1
2.数值间大小关系
NUM1=500
[ $NUM1 -gt “230” ]
echo $?
0
[ $NUM1 -le “500” ]
echo $?
0
[ $NUM1 -lt “500” ]
echo $?
1
3.多个判断
[ $NUM1 -gt “400” -a $NUM1 -lt “1000” ]
echo $?
0
注意:一个操作符连接的判断要写在一对方括号中。
[ $NUM1 -gt “400” ] -a [ $NUM1 -lt “1000” ]