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$