您的位置:首页 > 运维架构 > Shell

bash条件测试

2016-12-01 11:32 197 查看
表达式的类别:
文件表达式

数值表达式

字符串表达式

数值表达式:
-gt:是否大于; 大于,全拼为greate than

-ge:是否大于等于; 大于等于,全拼为greater equal

-eq:是否等于; 相等,全拼为equal
-ne:是否不等于; 不相等,全拼为not equal

-lt:是否小于; 小于,全拼为less than

-le:是否小于等于; 小于等于,全拼为less equal

字符串表达式:
==:是否等于;
>:是否大于;
<:是否小于;
!=:是否不等于;
=~:左侧字符串是否能够被右侧的PATTERN所匹配;
Note:此表达式一般用于` `中;
-z "STRING":测试字符串是否为空,空则为真,不空则为假;
-n "STRING":测试字符串是否不空,不空则为真,空则为假;
Note:用于字符串比较时乃至的操作数都应该使用引导
示例:
[root@C7-1 ~]# name=obama
[root@C7-1 ~]# [ -z "$name" ]
[root@C7-1 ~]# echo $?
1
存在性测试
-a FILE:这个很少用,一般用-e
-e FILE:文件存在测试,存在为真。

存在性及类别测试
-b FILE:是否存在且为块设备文件;
-c FILE:是否存在且为字符设备文件;
-f FILE:是否存在且为普通文件,存在为真,否则为假
-d FILE:是否存在且为目录文件;
-h FILE或 -L FILE:存在且为符号链接文件;
-p FILE:是否存在且为命令管道文件;
-S FILE:是否存在且为套接字文件;
文件权限测试:
-r FILE:是否存在且可读
-w FILE:是否存在且可写
-x FILE:是否存在且可执行
文件特殊权限测试:
-g FILE:是否存在且拥有sgid权限;
-u FILE:是否存在且拥有suid权限
-k FILE:是否存在且拥有stick权限
文件大小测试:
-s FILE:是否存在且非空;
文件是否打开:
-t fd:fd表示文件描述符是否已打开且与某终端相关
-N FILE:文件自动上一次被读取之后是否被修改过;
-O FILE:当前有效用户是否为文件的属主;
-G FILE:当前有效用户是否为文件的属组;
双目测试:
FILE1 -ef FILE2:FILE1与FILE2是否指向同一个设备上的相同inode
FILE1 -nt FILE2:FILE1是否新于FILE2;
FILE1 -ot FILE2:FILE1是否旧于FILE2;
组合测试条件:

引用:
Linux Shell脚本攻略
字符串比较
使用字符串比较时,最好用双中括号,因为有时候采用单个中括号会产生错误,所以最好避开它们。
可以用下面的方法检查两个字符串,看看它们是否相同。
[[ $str1 = $str2 ]]:当str1等于str2时,返回真。也就是说,str1和str2包含的文本是一模一样的。

[[ $str1 == $str2 ]]:这是检查字符串是否相等的另一种写法。

也可以检查两个字符串是否不同。
[[ $str1 != $str2 ]]:如果str1和str2不相同,则返回真。

我们还可以检查字符串的字母序情况,具体如下所示。
[[ $str1 > $str2 ]]:如果str1的字母序比str2大,则返回真。

[[ $str1 < $str2 ]]:如果str1的字母序比str2小,则返回真。

[[ -z $str1 ]]:如果str1包含的是空字符串,则返回真。

[[ -n $str1 ]]:如果str1包含的是非空字符串,则返回真。

逻辑运算:
第一种方式:
COMMAND1 && COMMAND2 注:先执行COMMAND1,只有在COMMAND1执行成功时,COMMAND2才能够执行
COMMAND1 || COMMAND2 注:先执行COMMAND1,只有在COMMAND1执行失败时,COMMAND2才能够执行
! COMMAND
[ -e FILE ] && [ -r FILE ] 存在且可读
第二种方式:
EXPRESSION1 -a EXPRESSION2
EXPRESSION1 -o EXPRESSION2

示例
















[zdw@c7 ~]$ [ ! \( -r /tmp/file100.sh -o -w /tmp/file100.sh \) ]
[zdw@c7 ~]$ echo $?
0
d
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息