条件判断

  • 熟悉条件判断语句,如判断整数、判断字符
  • 熟悉流程控制语句基本语法,如if..else

条件判断语法结构

语法结构

  • 格式1:test条件表达式
  • 格式2:[ 条件表达式 ]
  • 格式3:[[ 条件表达式 ]] 支持正则 =-

注意:格式2、3的条件表达式两边都有空格

更多判断,man test去查看

条件判断参数

判断文件是否存在

判断参数 含义
-e 判断文件是否存在
-f 判断文件是否存在且是一个普通文件
-d 判断文件是否存在且是一个目录
-L 判断文件是否存在且是一个软连接文件
-b 判断文件是否存在且是一个块设备文件
-S 判断文件是否存在且是一个套接字文件
-c 判断文件是否存在且是一个字符设备文件
-p 判断文件是否存在且是一个命名管道文件

注意:若判断文件不存在直接在命令前加'!'即可,如:test ! -e 2.sh

例:

[root@Computer ~]# ll
total 16
-rwxr-xr-x 1 root root  125 Jan 30 15:57 2.sh
-rw-r--r-- 1 root root  414 Jan 19 14:44 4.txt
-rw------- 1 root root 6921 Aug  8 20:48 anaconda-ks.cfg
-rw------- 1 root root 6577 Aug  8 20:48 original-ks.cfg
[root@Computer ~]# test -e 2.sh
[root@Computer ~]# echo $?
0
[root@Computer ~]# [ -e 2.sh ]
[root@Computer ~]# echo $?
0
[root@Computer ~]# [ -e 3.sh ]
[root@Computer ~]# echo $?
1

判断文件权限

判断参数 含义
-r 当前用于对其是否可读
-w 当前用户对其是否可写
-x 当前用户对其是否可执行
-u 是否有suid,高级权限冒险位
-g 是否有sgid,高级权限强制位
-k 是否有t为,高级权限粘滞位

注意:判断文件权限,判断的是当前用户对文件的权限

例:

[root@Computer ~]# test -r 2.sh ; echo $?
0
[root@Computer ~]# test -w 2.sh ; echo $?
0
[root@Computer ~]# test ! -w 2.sh ; echo $?
1
[root@Computer ~]# test -x 2.sh ; echo $?
0

判断文件新旧

注意:这里的新旧指的是文件的修改时间

判断参数 含义
file1 -nt file2 判断file1是否比file2新
file1 -ot file2 判断file1是否比file2旧
file1 -ef file2 比较是否为同一个文件,或者用于判断硬链接,是否指向同一个inode

例:

[root@Computer ~]# test 2.sh -nt 4.txt ; echo $?
0
[root@Computer ~]# test 2.sh -ot 4.txt ; echo $?
1
[root@Computer ~]# test 2.sh -ef 4.txt ; echo $?
1

判断整数

判断参数 含义
-eq 相等
-ne 不等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于

例:

[root@Computer ~]# test 2 -eq 3;echo $?
1
[root@Computer ~]# test 2 -eq 2;echo $?
0
[root@Computer ~]# test 2 -ne 3;echo $?
0
[root@Computer ~]# test 2 -gt 3;echo $?
1
[root@Computer ~]# test 2 -lt 3;echo $?
0
[root@Computer ~]# test 2 -ge 3;echo $?
1
[root@Computer ~]# test 2 -le 3;echo $?
0

判断字符串

判断参数 含义
-z 判断是否为空字符串,字符串长度为0则成立
-n 判断是否为非空字符串,字符串长度不为0则成立
string1 = string2 判断字符串是否相等
string1 != string2 判断字符串是否不相等

例:

[root@Computer ~]# test -z "hello" ; echo $?
1
[root@Computer ~]# test -n "hello" ; echo $?
0
[root@Computer ~]# test  "hello" = "world" ; echo $?
1
[root@Computer ~]# test  "hello" != "world" ; echo $?
0

多重条件判断

逻辑与:-a 或 &&
逻辑或:-o 或 ||
特别说明:

  • && 前面表达式为真时,才会执行后面的代码
  • || 前面表达式为假时,才会执行后面的代码
  • ; 用于分割命令或表达式

例:

[root@Computer ~]# test $(id -u) -eq 0 && echo "I am root"
I am root
[root@Computer ~]# test $(id -u) -eq 1 || echo "I am root"
I am root
[root@Computer ~]# test $(id -u) -eq 0 || echo "I am root"

类C风格的数值比较

注意:在(( ))中,=表示赋值,==表示判断
[root@Computer ~]# ((1==2));echo $?
1
[root@Computer ~]# ((1!=2));echo $?
0
[root@Computer ~]# ((1>2));echo $?
1
[root@Computer ~]# ((1<2));echo $?
0
[root@Computer ~]# ((a=2));echo $a
2
[root@Computer ~]# ((a==2));echo $a
2
[root@Computer ~]# ((a==2));echo $?
0

字符串比较

注意:双引号引起来,看作一个整体;=和==在[ 字符串 ]比较中都表示判断
[root@Computer ~]# a=hellow;b=world
[root@Computer ~]# [ $a = $b ];echo $?
1
[root@Computer ~]# [ $a == $b ];echo $?
1
[root@Computer ~]# [ $a != $b ];echo $?
0

[ ]和[[ ]]的区别

[ ]判断字符串时必须加双引号,[[ ]]不用
逻辑运算符连接两个表达式必须用[[ ]]

Last modification:May 25th, 2020 at 09:36 am
如果觉得我的文章对你有用,请随意赞赏