欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell之条件判断类型

程序员文章站 2024-02-19 13:50:04
...

shell之条件判断类型

1.判断语法

a)  test 条件表达式
b)  [ 条件表达式 ]
c)  [[ 条件表达式 ]]        可匹配正则 =~
d)  判断后执行多个命令
[  条件1 ] && {
          命令1
          命令2
}

示例

[ 1 -eq 2 ] && { echo aa;echo bb; } || { echo cc;echo dd; }

2.文件类型判断

-b 文件 判断文件是否存在,并且是否为块设备文件(是块设备文件则为真)
-c 文件 判断文件是否存在,并且是否为字符设备文件(是字符设备文件为真)
-d 文件 判断文件是否存在,并且是否为目录文件
-e 文件 判断文件是否存在(存在为真)
-f 文件 判断文件是否存在,并且是否为普通文件(是普通文件为真)
-L 文件 判断文件是否存在,并且是否为符号链接文件(是符号链接文件为真)
-p 文件 判断文件是否存在,并且是否为管道文件(是管道文件为真)
-s 文件 判断文件是否存在,并且是否为非空(非空为真)
-S 文件 判断文件是否存在,并且是否为套接字文件(是套接字文件为真)

2.按照文件权限类型判断文件

-r 文件 判断文件是否存在,并且是否拥有读权限(有读权限为真)
-w 文件 判断文件是否存在,并且是否拥有写权限(有写权限为真)
-x 文件 判断文件是否存在,并且是否拥有执行权限(有执行权限为真)
-u 文件 判断文件是否存在,并且是否拥有SUID权限(有SUID权限为真)
-g 文件 判断文件是否存在,并且是否拥有SGID权限(有SGID权限为真)
-k 文件 判断文件是否存在,并且是否拥有SBit权限(有SBit权限为真)

3.文件之间比较

文件1 -nt 文件2 判断文件1的修改时间是否比文件2新(如果为新则为真)
文件1 -ot 文件2 判断文件1的修改时间是否比文件2旧(如果为旧则为真)
文件1 -ef 文件2 判断文件1是否和文件2的inode号一致(如果一致,则为两个文件为同一个文件,这个判断可以用于硬链接)

4.两个整数之间比较

整数1 -eq 整数2 判断整数1是否和整数2相等(相等为真)
整数1 -ne 整数2 判断整数1是否和整数2不相等(不相等为真)
整数1 -gt 整数2 判断整数1是否大于整数2 (大于为真)
整数1 -lt 整数2 判断整数1是否小于整数2 (小于为真)
整数1 -ge 整数2 判断整数1是否大于等于整数2 (大于等于为真)
整数1 -le 整数2 判断整数1是否小于等于整数2 (小于等于为真)

5.字符串之间比较

-z 字符串  判断字符串是否为空(为空则为真)
-n 字符串  判断字符串是否为非空(非空则为真)
字符串1 == 字符串2 判断字符串是否和字符串2相等(相等则为真)
字符串1 != 字符串2 判断字符串1是否和字符串2不相等(不相等为真)
注意:[ "$1" = "abc" ]  ##判断字符是否相等,变量也要用双引号

6.文件内容判断

-s 是否为非空文件
! -s 表示空文件

7.多重条件判断

判断1 -a 判断2 逻辑与,判断1和判断2都成立,最终结果为真
判断1 -o 判断2 逻辑或,判断1和判断2有一个城里,最终结果为真
! 判断  逻辑非,使原始判断取反

8.不同符号测试表达式[]、[[]]、(())、test的区别

shell之条件判断类型

测试表达式符号	       []               		test                			[[]]                						(())
边界是否需要空格	  需要			  		  需要							需要				  						   不需要		
逻辑操作符           !、-a、-o					!、-a、-o			  			  !、&&、||		   							 !、&&、||	
整数比较操作符       -eq、-gt、-lt、-ge、-le    -eq、-gt、-lt、-ge、le          -eq、-gt、-lt、-ge、-le、=、>、<、>-、<= 		=、>、<、>-、<=		    		    			  
字符串比较操作符      =、==、!=		 		  =、==、!=		  				=、==、!=					  				    =、==、!=
是否支持通配符比较    不支持					不支持							  支持										  不支持  

9.常用判断类型

9.1 整数比较

-eq                       等于            		  if [ "$a" -eq "$b" ]
-ne                       不等于          			 if [ "$a" -ne "$b" ]
-gt                       大于            		  if [ "$a" -gt "$b" ]
-ge                       大于等于        			 if [ "$a" -ge "$b" ]
-lt                       小于            		  if [ "$a" -lt "$b" ]
-le                       小于等于        			 if [ "$a" -le "$b" ]
<                         小于(需要双括号)          (( "$a" < "$b" ))
<=                        小于等于(...)              (( "$a" <= "$b" ))
>                         大于(...)                  (( "$a" > "$b" ))
>=                        大于等于(...)               (( "$a" >= "$b" ))

9.2 字符串比较

=                         等于           if [ "$a" = "$b" ]
==                        与=等价
!=                        不等于         if [ "$a" != "$b" ]
<                         小于,在ASCII字母中的顺序:
                          if [[ "$a" < "$b" ]]
                          if [ "$a" \< "$b" ]         #需要对<进行转义
>                         大于
-z                        字符串为null,即长度为0
-n                        字符串不为null,即长度不为0
-z                        字符串为null,即长度为0
-n                        字符串不为null,即长度不为0