1、 条件测试命令:
1. test 条件表达式
2. [ 条件表达式 ]
3. [[ 条件表达式 ]]
4. (( 整数比较条件表达式 ))
shell中 true 对应 0 , false对应1
man test 可以查看测试命令帮助
2、测试表达式
2.1、 文件测试: [ 操作符 文件 ] 或 [ file1 操作符 file2 ]
常用测试文件表达式:
表达式 | 功能 |
---|---|
-e FILE | 文件存在 |
-d FILE | 文件是个目录 |
-f FILE | 文件是一个常规文件 |
-c FILE | 文件是个字符设备 |
-b FILE | 文件是个块设备 |
-g FILE | sgid到文件 |
-G FILE | 文件gid和当前用户gid相同 |
-h FILE or -L FILE | 文件是个链接文件 |
-O FILE | 文件属于当前用户 |
-p FILE | 文件是个管道 |
-r FILE | 当前用户对文件有读权限 |
-s FILE | 文件长度不为0 |
-S FILE | 文件是个socket |
-t FD | 在终端上打开文件描述符;一般用来检测是否在一个给定脚本中的 stdin[-t0]或[-t1]是一个终端 |
-u FILE | suid标志到文件 |
-w FILE | 当前用户对文件有写权限 |
-x FILE | 当前用户对文件有执行权限 |
FILE1 -ef FILE2 | file1和file2都硬链接到同一个文件 |
FILE1 -nt FILE2 | file1比file2新(文件修改时间) |
FILE1 -ot FILE2 | file1比file2老 |
[root@centos6 test2]# ll
总用量 8
-rw-r--r--. 1 root root 4 12月 4 15:29 aa.txt
drwxr-xr-x. 2 root root 4096 12月 4 15:29 dir1
[root@centos6 test2]#
[root@centos6 test2]# [ -d dir1 ]; echo $?
0
[root@centos6 test2]# [ -d aa.txt ]; echo $?
1
[root@centos6 test2]#
[root@centos6 test2]# [ -f aa.txt ]; echo $?
0
[root@centos6 test2]#
[root@centos6 test2]# [ -f dir1 ]; echo $?
1
[root@centos6 test2]#
2.2、整数比较(不能小数比较): [ int1 操作符 int2 ]
操作符标示:
操作符 | 描述 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-ge | 大于等于 |
-gt | 大于 |
-le | 小于等于 |
-lt | 小于 |
< | 小于,需要用(( ))括起来,如(( “$n” < “$m”)) |
<= | 小于等于,需要用(( ))括起来,如(( “$n” <= “$m”)) |
> | 大于,需要用(( ))括起来,如(( “$n” > “$m”)) |
>= | 大于等于,需要用(( ))括起来,如(( “$n” >= “$m”)) |
== | 等于,需要用(( ))括起来,如(( “$n” == “$m”)) |
!= | 不等于,需要用(( ))括起来,如(( “$n” != “$m”)) |
[root@centos6 test2]# [ 3 -gt 2 ] ; echo $?
0
[root@centos6 test2]#
[root@centos6 test2]# [ 3 -lt 2 ] ; echo $?
1
[root@centos6 test2]#
[root@centos6 test2]# [ 3 -le 2 ] ; echo $?
1
[root@centos6 test2]#
[root@centos6 test2]# [ 3 -eq 2 ] ; echo $?
1