码迷,mamicode.com
首页 > 其他好文 > 详细

bash编程之:条件测试

时间:2015-09-15 09:31:31      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:逻辑运算   条件测试   文件测试   字符测试   整数测试   

日期: 2015年09月13日



<<========================================【条件测试】========================================>>

条件测试

bash的条件测试主要有以下3类:

整数测试:比较两个整数谁大谁小,是否相等;

字符测试:比较两个字符串是否相等;

文件测试:测试某个文件是否具有读权限、写权限、执行权限等;


(1) 根据运行的命令的状态结果判断

(2) 在bash中进行条件测试的方式通常有三种:

test EXPRESSION

[ EXPRESSION ]  ==>两边必须要有空格,否则语法错误

[[ EXPRESSION ]]  ==>两边必须要有空格,否则语法错误


其中"["是启动测试命令,但要求在expression后要有一个"]"与其配对。使用该命令要特别注意"["后和"]"前的空格必不可少。


字符串比较时建议字符串变量要使用双引号,即使变量为空,也要使用双引号。


所有的测试条件都通过布尔值:(真、假) 来判定测试结果

真,假  (对于命令状态返回值来讲,0是真,其他数值都是假)


通过 echo $? 可获得上一条命令的执行状态;

状态用数字来表示:0-255;

0: 成功

1-255: 失败 (1、2、127 是系统预留的)



整数测试: A=100    B=101

[[ "$A" -gt "$B" ]]: 测试A的变量赋值是否大于B的变量赋值,是则为"真",否则为"假"

[[ "$A" -ge "$B" ]]: 测试A的变量赋值是否大于等于B的变量赋值,是则为"真",否则为"假"

[[ "$A" -lt "$B" ]]: 测试A的变量赋值是否小于B的变量赋值,是则为"真",否则为"假"

[[ "$A" -le "$B" ]]: 测试A的变量赋值是否小于等于B的变量赋值,是则为"真",否则为"假"

[[ "$A" -eq "$B" ]]: 测试A的变量赋值是否等于B的变量赋值,是则为"真",否则为"假"

[[ "$A" -ne "$B" ]]: 测试A的变量赋值是否不等于B的变量赋值,是则为"真",否则为"假"


示例:

技术分享



字符串测试:

ASCII数值越大,字符比较时其值越大

[[ ABC > ABC ]]: 左侧字符是否大于右侧字符

[[ ABC < ABC ]]: 左侧字符是否小于右侧字符

[[ ABC == ABC ]]: 左侧字符是否等于右侧字符

[[ ABC != ABC ]]: 左侧字符是否不等于右侧字符

[[ ABC =~ C ]]: 左侧字符串能否被右侧模式所匹配


示例:

技术分享


单目测试:

只测试一个变量

[[ -z $name ]]: 测试变量赋值是否为空,空则为"真",否则为"假"

[[ -n $name ]]: 测试变量赋值是否不空,不空则"真",空则为"假"


示例:

技术分享



文件测试:

测试文件的存在性以及属性:

-a /path/to/file:测试文件是否存在,存在为"真",否则为"假"

-e /path/to/file:测试文件是否存在,存在为"真",否则为"假"

-f /path/to/file:测试文件是否存在且为普通文件

-d /path/to/file:测试文件是否存在且为目录文件

-h /path/to/file:测试文件是否存在且为符号链接文件

-L /path/to/file:测试文件是否存在且为符号链接文件

-b /path/to/file:测试文件是否存在且为块设备文件

-c /path/to/file:测试文件是否存在且为字符设备文件

-S /path/to/file:测试文件是否存在且为套接字文件

-p /path/to/file:测试文件是否存在且为管道文件

-s /path/to/file:测试文件是否存在并且不空

 

-r /path/to/file:当前用户对文件是否拥有读权限

-w /path/to/file:当前用户对文件是否拥有写权限

-x /path/to/file:当前用户对文件是否拥有执行权限

 

-u /path/to/file:文件是否拥有SUID权限

-g /path/to/file:文件是否拥有SGID权限

-K /path/to/file:文件是否拥有sticky权限

 

-O /path/to/file:当前用户是否为指定文件的属主

-G /path/to/file:当前用户是否为指定文件的属组

 

双目操作符:

$file1 -nt $file2: file1的最近一次修改时间戳是否晚于file2

$file1 -ot $file2: file1的最近一次修改时间戳是否早于file2

$file1 -ef $file2: file1与file2是否指向了同一个inode,测试二者是否为硬链接

 

示例:

技术分享

        

        
        

<<====================================【组合条件测试】====================================>>

组合条件测试

条件间逻辑运算:

与:多个条件要同时满足

或:多个条件满足其一即可

非:对指定的条件取反

 

 

表达式组合:

与: [[ CONDITION1 -a CONDITION2 ]]

或: [[ CONDITION1 -o CONDITION2 ]]

非: [ ! CONDITION ]

 

示例:

技术分享



命令组合:

与: COMMAND1 && COMMAND2  <-- [ EXPR1 ] && [ EXPR2 ]

或: COMMAND1 || COMMAND2

非: ! COMMAND

 

 

逻辑运算:

与运算:(假和任何数相与都得假)

真 && 真 = 真

真 && 假 = 假

假 && 真 = 假

假 && 假 = 假

 

或运算:(真和任何数相或都得真)

真 || 真 = 真

真 || 假 = 真

假 || 真 = 真

假 || 假 = 假

 

非运算:(取反面)

! 真 = 假

! 假 = 真

 

 

短路操作符:对条件本身做逻辑运算

与:条件1 && 条件2

条件1为假,则最终结果一定为假,因此,条件2将不执行;

条件1为真,则最终结果取决于后面条件,因此,条件2必须执行;

或:条件1 || 条件2

条件1为真,则最终结果一定为真,因此,条件2将不再执行;

条件1为假,则最终结果取决于后面条件,因此,条件2必须执行;

非: ! 条件

 

示例:

id一个用户名,如果执行成功则显示该用户存在,如果id命令没有执行成功,则显示该用户不存在。

id $userName &> /dev/null&& echo "$userNmae exist." || echo "$userName notexist"

技术分享


 

 


bash编程之:条件测试

标签:逻辑运算   条件测试   文件测试   字符测试   整数测试   

原文地址:http://yao3800.blog.51cto.com/1522113/1694789

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!