shell中条件测试常用的语法(一)
-
执行条件测试表达式后通常会返回“真”或“假”,就像执行命令后的返回值为0表示真,非0表示假一样。在bash编程里,条件测试常用的语法形式如下:
[root@ceshiji ~]# touch wtf
[root@ceshiji ~]# ll wtf
-rw-r--r-- 1 root root 0 10月 23 03:25 wtf
[root@ceshiji ~]# chmod 001 wtf
[root@ceshiji ~]# ll wtf
---------x 1 root root 0 10月 23 03:25 wtf
[root@ceshiji ~]# [ -r wtf ] && echo 1 || echo 0
1
[root@ceshiji ~]# [ -w wtf ] && echo 1 || echo 0
1
[root@ceshiji ~]# [ -x wtf ] && echo 1 || echo 0
1
说明:wtf这个普通文件没有可读可写的权限,为什么还会返回1呢?这是因为我们使用的是root账户的原因!所以,我们在测试一个文件的读,写,执行等属性,不光是根据文件属性rwx的标识来判断,还要看当前执行测试的用户是否真的可以按照对应的权限操作该文件。
-
变量的特殊写法和问题
[root@ceshiji ~]# echo $wtf
[root@ceshiji ~]# [ -e $wtf ] && echo 1 || echo 0
1
[root@ceshiji ~]# [ -e "$wtf" ] && echo 1 || echo 0
0
说明:变量wtf是不存在的,但[ -e $wtf ]直接判断时,返回值是1,这与逻辑不符合,所以这个时候变量wtf要加上双引号"$wtf"。
对于文件加不加引号结构都是一样的,如:
[root@ceshiji ~]# cd /tmp
[root@ceshiji tmp]# ls
tmp0F7ZGn tmpcywyqY tmpEAwY35 tmpinHrdN tmpwk_xzo yum.log
[root@ceshiji tmp]# [ -e /tmp/wutengfei ] && echo 1 || echo 0
0
[root@ceshiji tmp]# [ -e "/tmp/wutengfei" ] && echo 1 || echo 0
0