条件测试
判断某需求是否满足,需要由测试机制来实现
专用的测试表达式需要由测试命令辅助完成测试过程
评估布尔声明,以便用在条件性执行中
- 若真,则返回0
- 若假,则返回1
测试命令:
~]# test EXPRESSION
~]# [ EXPRESSION ]
~]# [[ EXPRESSION ]]
注意:EXPRESSION前后必须有空白字符
表达式
- 数值测试:数值比较
-eq:是否等于;
-ne:是否不等于;
-gt:是否大于;
-ge:是否大于等于;
-lt:是否小于;
-le:是否小于等于; - 字符串测试:
==:是否等于;
>:是否大于;
<:是否小于;
!=:是否不等于;
=~:左侧字符串是否能够被右侧的PATTERN所匹配;
-z "STRING":判断指定的字符串是否为空;空则为真,不空则为假;
-n "STRING":判断指定的字符串是否不空;不空则为真,空则为假;
注意:
- 字符串要加引号;
- 要使用[[ ]];
- 文件测试:
- 文件的存在性测试:存在则为真,否则为假;
-e FILE
-a FILE - 类型测试:
-b FILE:是否存在并且为块设备文件;
-c FILE:是否存在并且为字符设备文件;
-d FILE:是否存在并且为目录文件;
-f FILE:是否存在并且为普通文件;
-h|-L FILE:是否存在并且为符号链接文件;
-p FILE:是否存在并且为命令管道文件;
-S FILE:是否存在并且为套接字文件; - 权限测试:
-r FILE:是否存在并且对当前用户可读;
-w FILE:是否存在并且对当前用户可写;
-x FILE:是否存在并且对当前用户可执行; - 特殊权限测试:
-u FILE:是否存在并且拥有suid权限;
-g FILE:是否存在并且拥有sgid权限;
-k FILE:是否存在并且拥有sticky权限; - 文件大小测试:
-s FILE:是否有内容; - 时间戳测试:
-N FILE:文件自从上一次读操作后是否被修改过; - 从属关系测试:
-O FILE:当前用户是否为文件的属主;
-G FILE:当前用户是否属于文件的属组; - 双目测试:
FILE1 -ef FILE2:测试两个文件是否为指向同一个文件系统上相同的inode硬链接;
FILE1 -nt FILE2:FILE1是否新于FILE2;
FILE1 -ot FILE2:FILE1是否旧于FILE2;
- 文件的存在性测试:存在则为真,否则为假;
Bash 的组合测试条件
- 第一种方式:
COMMAND1 && COMMAND2
:并且
COMMAND1 || COMMAND2
:或者
!COMMAND
:非
如:~]# [[ -r FILE ]] && [[ -w FILE ]]
- 第二种方式:
EXPRESSION1 -a EXPRESSION2
:并且
EXPRESSION1 -o EXPRESSION2
:或者
!EXPRESSION
:非
必须使用测试命令进行
示例:[root@node1 ~]# [ -z "$HOSTNAME" -o "$HOSTNAME"=="localhost.localdomain" ] && hostname www.magedu.com [root@node1 ~]# [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab
网友评论