shell编程之条件测试
2017-03-02 16:41
218 查看
一、条件测试语法:
test 测试内容[ 测试内容 ] ##注意中括号与测试内容间有空格
[[ 测试内容 ]]
(( 测试内容 )) ##只能用于测试数值大小,后面详解
前三种测试语法基本等同。
二、数值测试:
2.1 常见的数值测试:
int1 -eq int2 如果int1 等于int2,则返回真int1 -ne int2 如果int1 不等于int2,则返回真
int1 -lt int2 如果int1 小于int2,则返回真
int1 -gt int2 如果int1 大于int2,则返回真
int1 -le int2 如果int1 小于等于int2,则返回真
int1 -ge int2 如果int1 大于等于int2,则返回真
2.2 在(( ))中测试
< 小于(在双括号里使用) (("int1" < "int2")) 等同于 [ int1 [b]-lt int2[/b] ][root@server1 ~]# (( "2" < "3" ))
[root@server1 ~]# echo $?
0
[root@server1 ~]# [ 1 -lt 3 ]
[root@server1 ~]# echo $?
0
<= 小于等于 (在双括号里使用) (("int1" <= "int2")) 等同于 [ int1 -ne int2 ]
> 大于 (在双括号里使用) (("int1" > "int2")) 等同于 [ int1 -gt int2 ]
>= 大于等于(在双括号里使用) (("int1" >= "int2")) 等同于 [ int1 -ge int2 ]
注意:双括号测试不能测试数值相等的情况,使用双括号测试等于是会报如下错误:
[root@server1 ~]# (( "2" = "3" ))
-bash: ((: 2 = 3 : attempted assignment to non-variable (error token is "= 3 ")
3、测试字符串:
-z string 字符串string 为空串(长度为0)时返回真-n string 字符串string 为非空串时返回真
str1 = str2 字符串str1 和字符串str2 相等时返回真
str1 == str2 同 =
str1 != str2 字符串str1 和字符串str2 不相等时返回真
str1 < str2 按字典顺序排序,字符串str1 在字符串str2 之前,一般不会用到
str1 > str2 按字典顺序排序,字符串str1 在字符串str2 之后,一般不会用到
测试示例:
[root@server1 ~]# A=str[root@server1 ~]# B=str
[root@server1 ~]# [ $A = $B ]
[root@server1 ~]# echo $?
0
[root@server1 ~]# B=Str
[root@server1 ~]# [ $A = $B ]
[root@server1 ~]# echo $?
1
[root@server1 ~]# [ -n $B ]
[root@server1 ~]# echo $?
0
[root@server1 ~]# [ -z $B ]
[root@server1 ~]# echo $?
1
4、文件测试:
-b FILE 存在并且是块文件时返回真;-c FILE 存在并且是字符文件时返回真;
-e FILE 文件或目录存在时返回真;
-f FILE 文件为普通文件时返回真;
-d FILE 指定路径为目录时返回真;
-r FILE 当前用户对指定文件有读取权限时返回真;
-w FILE 当前用户对指定的目录或文件存在并并可写时返回真;
-x FILE 当前用户对指定的文件或目录存在并且可执行时返回真;
-s FILE 指定文件存在并且文件大小大于0时返回真
-O FILE 存在并且属于当前进程的有效用户id 的用户的用户组时返回真
-G FILE 存在并且属于当前进程的有效用户id 的用户的用户组时返回真
FILE1 -nt FILE2 当FILE1比FILE2新时返回真
FILE1 -ot FILE2 当FILE1比FILE2旧时返回真
FILE1 -ef FILE2 当FILE1和FILE2硬链接到同一个文件时返回真
测试示例:
[root@server1 ~]# [ -d /etc/sysconfig/network ][root@server1 ~]# echo $?
1
[root@server1 ~]# [ -d /etc/sysconfig/network-scripts ]
[root@server1 ~]# echo $?
0
5、在测试中使用逻辑操作符:
5.1 单[]中的逻辑测试符
-a 逻辑与,操作符两边均为真,结果为真,否则为假-o 逻辑或,操作符两边一边为真,结果为真,否则为假
! 逻辑否,条件为假,结果为真
测试示例:
[root@server1 ~]# [ -d /etc/sysconfig/network-scripts -o -e /etc/fstabs ][root@server1 ~]# echo $?
0
[root@server1 ~]# [ -d /etc/sysconfig/network-scripts -a -e /etc/fstabs ]
[root@server1 ~]# echo $?
1
[root@server1 ~]# [ -d /etc/sysconfig/network-scripts -a -e /etc/fstab ]
[root@server1 ~]# echo $?
0
[root@server1 ~]# [ -d /etc/sysconfig/network-scripts -o -e /etc/fstabs ]
[root@server1 ~]# echo $?
0
[root@server1 ~]# [ ! -e /etc/fstabs ]
[root@server1 ~]# echo $?
0
[root@server1 ~]# [ -e /etc/fstabs ]
[root@server1 ~]# echo $?
1
##注意标红部分不一样的地方
5.2 双[[]]中的逻辑测试符:
&& 逻辑与,操作符两边均为真,结果为真,否则为假,功能上与 -a 相同|| 逻辑或,操作符两边一边为真,结果为真,否则为假,功能上与 -o 相同
测试示例:
[root@server1 ~]# [ -b /dev/sdb -a -e /etc/fstab ][root@server1 ~]# echo $?
0
[root@server1 ~]# [[ -b /dev/sdb && -e /etc/fstab ]]
[root@server1 ~]# echo $?
0
[root@server1 ~]# [[ -b /dev/sdb && -e /etc/fstabs ]]
[root@server1 ~]# echo $?
1
[root@server1 ~]# [[ -b /dev/sdb || -e /etc/fstabs ]]
[root@server1 ~]# echo $?
0
另外,测试还支持通配符,如:
[root@server1 ~]# [ -e /etc/in*t ]
[root@server1 ~]# echo $?
0
相关文章推荐
- Shell脚本编程——条件测试
- 1.3 Shell脚本编程基础之条件测试
- Shell 编程学习笔记:条件测试
- SHELL 编程 -- 条件测试
- #7 shell脚本编程之bash运算和条件测试命令
- shell脚本编程之条件判断,算术运算,整数测试及特殊变量
- shell脚本编程之条件测试——test
- Unix/Linux Shell 编程笔记——条件测试
- shell脚本编程之条件测试和判断
- Shell脚本编程概述(一):算数运算和条件测试
- shell脚本及条件测试
- shell条件测试
- Linux Shell编程(三)--条件测试
- shell程序设计的语法--lt;条件测试>
- shell学习之条件测试
- Shell 编程测试习题
- shell 条件测试
- shell之条件测试
- SHELL中的测试条件
- linux运维初级班shell脚本编程测试及参考答案