Linux在用于条件判断的时候,通常使用test运算符。 它的常见形式是test condition
其中用于文件状态判断的时候,常有以下判断方法:
-d 目录 -s 文件长度大于0、非空 -f 正规文件 -w 可写
-L 符号链接(ln命令创建出来的连接) -u(文件有suid位设置) -r 可读 -x 可执行
例如:
ls -l d
//输出-rw-rw-r-- 1 chenwu chenwu 19 06-03 21:38 d
test -r d
echo $?($?返回执行结果 0表示执行成功,其他的状态码都是错误结果)
//输出0
test -x d
echo $?
//输出1
在用于联合判断的时候,常用的-a(相当于JAVA\C 的&& 或者Python的and) -o(相当于JAVA\C的||或者Python的or)
例如:
test -x d -o -r d
echo $?
//输出0
test -x d -a -r d
echo $?
//输出1
在判断字符串的时候,有以下几种表达方式:
-z 判断空串(z表示zero)
-n 判断非空串(n 表示not zero)
= 判断字符串是否相等
!= 判断字符串是否不相等
例如:
m=love
test -z m(判断m是否为空串)
echo $?//输出1(不是空串)
test -n m(判断m是否不是空串)
echo $?//输出0(的确不是空串)
但是二者对于未定义的变量判断都是一致的
test -z $love
echo $?
test -n $love
echo $?
这次两者都输出0(这个问题有待进一步研究)
再来看下Linux对于数值类型的判断
-eq 判断是否相等 (eq = equal)
-ne 判断是否不相等 (ne = not equal)
-lt 判断第一个数是否小于第二个数(lt = lower than)
-gt 判断第二个数是否大于第二个数(gt = large than)
-le 判断第一个数是否小于等于第二个数 (-le = lower or equal)
-ge 判断第一个数是否大于第二个数 (-ge = large or equal)
在与-a -o联合判断的时候,需要注意括号的数量(还有一点就是当你不确定数值与操作符是否应该有空格的时候,不妨加上空格,事实上除了赋值语句不能加空格之外,其他几乎所有的操作符和操作数之间都可以加空格)
m=15
n=13
test [ $m -lt $n ] -o [ $m -gt $n ]
//输出bash: test: too many arguments
//提示括号过多
//稍微改造下
test [ $m -lt $n -o $m -gt $n ]
//顺利的通过编译
echo $?
//输出0