[ condition ] 这里需要注意的是condition前后要有一个空格,条件非空即为true,比如 [ xxx ] 返回true,[] 则返回 false
(1) 两个整数之间比较
(2) 按照文件权限进行判断
(1) 比较两个数的大小,如下,当返回值为0为true,否则当返回值为1则为false,此外,当放括号与数字之间必须要有空格
# 条件两边没有空格会报错
$ [3 -gt 2]
-bash: [3: command not found
# 条件 3大于2
$ [ 3 -gt 2 ]
# 打印上一条命令返回码
$ echo $?
0
# 作为字符串比较 3等于2
$ [ 3 = 2 ]
# 打印上一条语句返回码
$ echo $?
1
# 比较 3小于2
$ [ 3 -lt 2 ]
# 打印上一条语句返回码
$ echo $?
1
# 比较,3不等于2
$ [ 3 -ne 2 ]
# 打印上一条语句返回码
$ echo $?
0
# 比较 3等于2
$ [ 3 -eq 3 ]
# 打印上一条语句返回码
$ echo $?
0
$
(2) 判断文件是否存在以及类型
$ mkdir demo
$ ls
demo test.sh
# 判断 test.sh为文件
$ [ -f test.sh ]
$ echo $?
0
# 判断demo为目录
$ [ -d demo ]
$ echo $?
0
# 判断test.sh为目录
$ [ -d test.sh ]
$ echo $?
1
# 判断demo为文件
$ [ -f demo ]
$ echo $?
1
# 判断test.sh存在
$ [ -e test.sh ]
$ echo $?
0
# 判断demo存在
$ [ -e demo ]
$ echo $?
0
# 判断hahaha存在
$ [ -e hahahaha ]
$ echo $?
1
$
(3) 判断文件权限的条件,如下
$ ls -l
total 4
drwxrwxr-x. 2 honghua honghua 6 Jul 7 13:23 demo
-rw-rw-r--. 1 honghua honghua 21 Jul 6 16:52 test.sh
# 判断test.sh有读权限
$ [ -r test.sh ]
$ echo $?
0
# 判断demo有写的权限
$ [ -w demo ]
$ echo $?
0
# 判断test.sh有可执行权限
$ [ -x test.sh ]
$ echo $?
1
# 判断demo有可执行权限
$ [ -x demo ]
$ echo $?
0
$
如下,其中test.sh为文件,demo为目录
# 首先判断3大于2,为True,继续判断test.sh存在,也为True,因此返回码为0
$ [ 3 -gt 2 ] && [ -f test.sh ]
$ echo $?
0
# 首先判断test.sh存在,为True,然后判断test.sh拥有可执行权限,为False,因此返回码为1
$ [ -e test.sh ] && [ -x test.sh ]
$ echo $?
1
# 首先判断test.sh是目录,为False,因为逻辑为或,所以继续判断demo是目录,为True,所以返回码为0
$ [ -d test.sh ] || [ -d demo ]
$ echo $?
0
$