shell 条件判断

①test可以进行以下文件类型的判断(在为真)

格式:test [选项]  内容 文件名   或  [ 选项  内容]

-b  是否为块文件

-c  是否为字符文件

-d  是否为目录文件

-e  文件是否存在,存在为真

-f  是否为普通文件

-L  是否为符号链接文件

-p  是否为管道文件

-s  是否为空文件

:~/shellTest$ [ -f test08.txt ] && echo yes || echo no
yes

②按照文件权限进行判断(有为真)

-r文件  是否拥有读权限

-w文件    是否拥有写权限

-x文件  是否拥有执行权限

-u文件  是否拥有SUID权限(suid属性只能运用于可执行文件上,含义是开放文件所有执行权限给其他用户)

-g文件  是否拥有SGID权限(sgid属性可运用于文件或目录,含义是开放文件所属组的权限给其他用户)

-k文件  是否拥有SBit权限(用来修饰一个目录,当任何一个目录拥有sbit权限时,则任何一个能够在这个目录下建立文件的用户,该用户在这个目录下所建立的文件,只有该用户                    和root可以删除,其他用户均不可以)

:~/shellTest$ ll test08.txt
-rw-rw-r-- 1 gjl gjl 164  4月 19 19:15 test08.txt
-virtual-machine:~/shellTest$ [ -w test08.txt ] && echo yes || echo no
yes
-virtual-machine:~/shellTest$ [ -u test08.txt ] && echo yes || echo no
no

③两个文件之间进行比较

文件1 -nt 文件2  判断文件1的修改时间是否比文件2的新(新为真)

文件1 -ot 文件2  判断文件1的修改时间是否比文件2的旧(旧为真)

文件1 -ef 文件2  判断文件1和文件2的inode号一致,即两个文件是否为同一个文件。判断硬链接比较好

例如1:判断文件新旧,和创建硬链接,比较两个文件

-nt 比较文件1是否比文件2新
-virtual-machine:~/shellTest$ [ test01.sh -nt test08.txt ] && echo yes || echo no
no
-ot 比较文件1是否比文件2旧
-virtual-machine:~/shellTest$ [ test01.sh -ot test08.txt ] && echo yes || echo no
yes

-ef 判断两个文件是否一致,ln创建硬链接
-virtual-machine:~$ ln /home/gjl/shellTest/test08.txt  /home/gjl/shellTest/test10
-virtual-machine:~$ cd shellTest 
-virtual-machine:~/shellTest$ ls
test01.sh  test02.sh  test03.sh  test04.sh  test05.sh  test06.sh  test07.sh  test08.txt  test09.sh  test10
-virtual-machine:~/shellTest$ cat test10
name     sex     phone             score
meim    girl    12565665896    55.6
dk    girl    12565665896    96
jack    boy    12565665896    99.6
maoo    boy    12565235896    44.6
maoo    boy    1256536            55.6
-virtual-machine:~/shellTest$ cat test08.txt
name     sex     phone             score
meim    girl    12565665896    55.6
dk    girl    12565665896    96
jack    boy    12565665896    99.6
maoo    boy    12565235896    44.6
maoo    boy    1256536            55.6
-virtual-machine:~/shellTest$  [ test08.txt -ef test10 ]  && echo yes || echo no
yes
-virtual-machine:~/shellTest$

④两个整数进行比较(一般字符串用==,整数可以用这个

整数1 -eq 整数2  整数1是否和整数2相等(相等为真)

整数1 -ne 整数2  整数1是否和整数2不相等

整数1 -gt  整数2  整数1是否大于整数2 ,greater than

整数1 -lt   整数2  整数1是否小于整数2,less than

整数1 -ge 整数2  整数1是否大于等于整数2

整数1 -le  整数  整数1是否小于等于整数2

例如1:比较整数大小

:~/shellTest$ [ 23 -eq 24 ] && echo yes || echo no
no
-virtual-machine:~/shellTest$ [ 23 -ne 24 ] && echo yes || echo no
yes
-virtual-machine:~/shellTest$ [ 23 -gt 24 ] && echo yes || echo no
no
-virtual-machine:~/shellTest$ [ 23 -lt 24 ] && echo yes || echo no
yes
-virtual-machine:~/shellTest$ [ 23 -ge 24 ] && echo yes || echo no
no
-virtual-machine:~/shellTest$ [ 23 -le 24 ] && echo yes || echo no
yes
-virtual-machine:~/shellTest$

⑤字符串的判断

-z 字符串  字符串是否为空

-n 字符串  字符串是否为非空

字符串1 == 字符串2  字符串1是否和字符串2相等

字符串1 !== 字符串2  字符串1是否不等于字符串2

⑥多重条件判断

判断1 -a 判断2   逻辑与,只有判断1和判断2都成立,最终结果才为真

判断1 -o 判断2   逻辑或,判断1和判断2只要有一个成立,最终的结果就为真

! 判断       逻辑非,使原始的判断式取反

例如1:

判断a是否为空,同时判断a是否大于23.逻辑与
-virtual-machine:~/shellTest$ a=12

-virtual-machine:~/shellTest$ [ -n "$a" -a "$a" -gt 23 ] && echo yes || echo no
no
-virtual-machine:~/shellTest$ a=33
-virtual-machine:~/shellTest$ [ -n "$a" -a "$a" -gt 23 ] && echo yes || echo no
yes
-virtual-machine:~/shellTest$ 

逻辑或
-virtual-machine:~/shellTest$ a=12
-virtual-machine:~/shellTest$ [ "$a" -eq 13 -o "$a" -gt 3 ] && echo yes || echo no
yes
-virtual-machine:~/shellTest$