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的区别
测试表达式符号 [] 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