条件测试
1.条件测试
判断某需求是否满足,需要由测试机制来实现;
专用的测试表达式需要由测试命令辅助完成测试过程;
评估布尔声明,以便用在条件性执行中
• 若真,则返回0
• 若假,则返回1
2.测试命令:
• test EXPRESSION
• [ EXPRESSION ]
• [[ EXPRESSION ]]
注意: EXPRESSION前后必须有空白字符
3.条件性的执行操作符
根据退出状态而定,命令可以有条件地运行
• && 代表条件性的 AND THEN
• || 代表条件性的 OR ELSE
例如:
$ grep -q no_such_user /etc/passwd || echo 'No such user' No such user
$ ping -c1 -W2 station1 &> /dev/null && echo "station1 is up" \
> || (echo 'station1 is unreachable'; exit 1)
station1 is up
若ping -c1 -W2 station1执行成功,则echo "station1 is up",否则echo 'station1 is unreachable'; exit
4.test命令
长格式的例子:
$ test "$A" == "$B" && echo "Strings are equal"
$ test “$A” -eq “$B”&& echo "Integers are equal"
简写格式的例子:
$ [ "$A" == "$B" ] && echo "Strings are equal"
$ [ "$A" -eq "$B" ] && echo "Integers are equal"
5.bash的测试类型
数值测试:(注意前面有“-”)
–gt: 是否大于; greater than
-ge: 是否大于等于; greater equal
-eq: 是否等于; equal
-ne: 是否不等于; not equal
-lt: 是否小于; less than
-le: 是否小于等于; less equal
eg: [ "$A" -eq "$B" ]
字符串测试:
==:是否等于;
>: ascii码是否大于ascii码
<: 是否小于
!=: 是否不等于
=~: 左侧字符串是否能够被右侧的PATTERN所匹配
注意: 此表达式一般用于[[ ]]中;
-z "STRING":字符串是否为空,空为真,不空为假
-n "STRING":字符串是否不空,不空为真,空为假
注意:用于字符串比较时的用到的操作数都应该使用引号
文件测试
存在性测试
-a FILE:同-e
-e FILE: 文件存在性测试,存在为真,否则为假;
存在性及类别测试
-b FILE:是否存在且为块设备文件;
-c FILE:是否存在且为字符设备文件;
-d FILE:是否存在且为目录文件;
-f FILE:是否存在且为普通文件;
-h FILE 或 -L FILE:存在且为符号链接文件;
-p FILE:是否存在且为命名管道文件;
-S FILE:是否存在且为套接字文件;
文件权限测试:
-r FILE:是否存在且可读
-w FILE: 是否存在且可写
-x FILE: 是否存在且可执行
文件特殊权限测试:
-g FILE:是否存在且拥有sgid权限;
-u FILE:是否存在且拥有suid权限;
-k FILE:是否存在且拥有sticky权限;
文件大小测试:
-s FILE: 是否存在且非空;
文件是否打开:
-t fd: fd表示文件描述符是否已经打开且与某终端相关
-N FILE:文件自动上一次被读取之后是否被修改过
-O FILE:当前有效用户是否为文件属主
-G FILE:当前有效用户是否为文件属组
6.双目测试:
FILE1 -ef FILE2: FILE1与FILE2是否指向同一个设备上的相同inode
FILE1 -nt FILE2: FILE1是否新于FILE2;
FILE1 -ot FILE2: FILE1是否旧于FILE2;
7.组合测试条件
第一种方式:
COMMAND1 && COMMAND2 并且
COMMAND1 || COMMAND2 或者
! COMMAND 非
如: [ -e FILE ] && [ -r FILE ]
第二种方式:
EXPRESSION1 -a EXPRESSION2 并且
EXPRESSION1 -o EXPRESSION2 或者
! EXPRESSION 非
(使用单括号)
必须使用测试命令进行
[ -z “$HOSTNAME” -o ”$HOSTNAME " == "localhost.localdomain" ] && hostname www.magedu.com
[ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab
原创文章,作者:ldt195175108,如若转载,请注明出处:http://www.178linux.com/33706