bash编程之:条件测试

日期: 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"

时间: 2024-10-11 00:54:21

bash编程之:条件测试的相关文章

谢烟客---------Linux之Bash基础特性条件测试&&自定义退出状态码(6)

条件测试 判断某需求是否满足,需要由测试机制来实现. 根据命令的执行状态结果,表达不同的测试条件 1.根据id命令的执行状态结果,判断用户是否存在 [[email protected] ~]# id root uid=0(root) gid=0(root) groups=0(root) [[email protected] ~]# echo $? 0 [[email protected] ~]# id help id: help: no such user [[email protected] 

linux命令中bash常用的条件测试:整数测试eq,文件测试-e,字符串测试==

测试方法:expression: 表达,表示 [ expression ] [[ expression ]] test expression  bash中常用的条件测试有三种:  1.整数测试:      -eq 等于      -lt 小于      -ne 不等于      -gt 大于      -le 小于等于      -ge 大于等于 integer:整数      INTEGER1=63     INTEGER2=77     [ $INTEGER1 -eq $INTEGER2 ]

bash算术运算和条件测试

常用的bsh算术运算方法 1.$[expression]:其中的表达式可以是纯数字组成的,也可以使用变量引用变量值 [[email protected] ~]# echo $[3+9*3] 30 在引用变量时,可以不使用引用符 [[email protected] ~]# int1=3 [[email protected] ~]# int2=9 [[email protected] ~]# echo $[int1+int2*int1] 30 2.let VAR=EXPRESSION   根据算术

bash编程:条件测试

整数测试:做数值大小以及是否相等比较 $A -lt $B:表示是否小于 $A -gt $B:表示是否大于 $A -le $B:是否小于等于 $A -gt $B:是否大于等于 $A -eq $B:表示是否等于 $A -ne $B:表示是否不等于 示例:$A小于$B echo $?为"0"表示成功 [[email protected] ~]# A=10 [[email protected] ~]# B=20 [[email protected] ~]# [ $A -lt $B ] [[em

bash编程之:if语句

日期: 2015年09月13日 if语句 单分支if语句格式: if CONDITION; then if-true-分支 fi ★(then亦可以书写为单独一行,如果要跟条件放在同一行则与条件之间要使用分号;隔开) 示例: 给定一个文件路径,如果该文件存在,则显示该文件存在,不存在则不显示任何信息 运行该脚本测试: 双分支if语句格式: if CONDITION; then if-true-分支 else if-true-分支 fi 示例: 给定一个文件路径,如果该文件存在,则显示该文件存在,

bash编程之:case语句、read与用户交互

日期: 2015年09月13日 case语句 case语句:该语句和if并无太大差别,主要作用是使代码的逻辑结构更清晰. case语句可以称为是:简洁版的多分支if语句 使用场景:判断某变量的值是否为多种情形中的一种时使用 case语句的用法格式为: case $VARIALBE in PATTERN1) 分支1 ;;     <================注意:这两个分号不要忘记写,否则语法错误 PATTERN2) 分支2 ;;     <================注意:这两个分号

bash编程之:流程控制

日期: 2015年09月13日 流程控制 循环语句:for, while, until 循环:将循环体代码执行0.1或多次 进入条件:进入循环的条件 退出条件:循环终止的条件 <<========================================[for循环]========================================>> for循环: for VARIABLE in LIST; do 循环体 done 进入条件:列表非空 退出条件:当列表遍历结束

bash编程之case语句

一.语法格式 case 变量引用(${}) in value1)    #变量的值是value1,则执语句1,语句2,······ 语句1 语句2 ······ ;;    #每个分支结束时都需要以双分号结尾 value2)    #变量的值是value2,则执语句3,语句4,······ 语句3 语句4 ······ ;; value3)    #变量的值是value3,则执语句5,语句6,······ 语句5 语句6 ······ ;; *)    #其他任意情况,则执行语句7,语句8,··

bash编程之:算术运算

日期: 2015年09月13日 算术运算 Shell默认不支持浮点数,所以计算结果中的浮点数会被圆整为整数, 如:1.03>1:4.99>4 算术运算的方式: (1) $[$A+$B] (2) VARIABLE=$((expression)) (3) let VARIABLE=$A+$B (4) expr $A + $B (5) bc 运算符: ++ --  增加或减少,(符号在变量前,先输出运算后的结果,符号在变量后,则先输出变量原来的值) + - ! ~  一元的正号与负号.逻辑与位的取反