(6)Linux ----- Shell编程条件测试 ---- ④
2015-01-08 09:57
405 查看
--------------------------------------------------------
条件测试
字符串测试
整数测试
逻辑测试
文件测试
--------------------------------------------------------
条件测试
条件测试可以根据某个特定条件是否满足,来选择执行相应的任务。
Bash 中允许测试两种类型的条件:
命令成功或失败,表达式为真或假
任何一种测试中,都要有退出状态(返回值),
退出状态为
0 表示命令成功或表达式为真,
非0 则表示命令失败或表达式为假。
状态变量$? 中保存命令退出状态的值
--------------------------------------------------------
测试表达式的值
表达式测试包括字符串测试、整数测试和文件测试。
--------------------------------------------------------
内置测试命令test
l通常用test 命令来测试表达式的值
l test 命令可以用方括号 来代替
方括号前后要留空格!
[root@panjinming ~]# x=5;y=10
You have new mail in /var/spool/mail/root
[root@panjinming ~]# [$x -gt $y]
-bash: [5: command not found
[root@panjinming ~]# [ $x -gt $y ]
[root@panjinming ~]# echo $?
1
[root@panjinming ~]#
l2.x 版本以上的
Bash 中可以用双方括号来测试表达式的值,此时可以使用通配符进行模式匹配。
--------------------------------------------------------
字符串测试 操作符两边必须留空格!
--------------------------------------------------------
整数测试
整数测试,即比较大小 操作符两边必须留空格!
x=1; [ $x -eq 1 ];echo
$? 0
x=a; [ $x -eq 1 ];echo
$? -bash: [: a: integer expression expected 2
整数测试也可以使用 let命令或双圆括号
==、!=、>、>=、<、<=
x=1; let"$x==1";echo
$? 0
x=1; (($x+1>=
2 ));echo $? 0
两种测试方法的区别
l使用的操作符不同
l let 和双圆括号中可以使用算术表达式,而中括号不能
l let 和双圆括号中,操作符两边可以不留空格
--------------------------------------------------------
逻辑测试
x=1; name=Tom;
[ $x -eq 1 –a –n
$name ];echo $?
0
注:不能随便添加括号
[($x-eq1)–a
(–n
$name)];echo $?
-bash: syntax error near unexpected token `$x'
可以使用模式的逻辑测试
x=1; name=Tom;
[[ $x -eq 1 && $name
= To? ]];echo $?
0
--------------------------------------------------------
检查空值
[ "$name" = ""
]
[ ! "$name" ]
[ "X${name}"="X"
]
--------------------------------------------------------
文件测试
--------------------------------------------------------
括号总结
--------------------------------------------------------
总结
q条件测试
q字符串测试
q整数测试
q逻辑测试
q文件测试
条件测试
字符串测试
整数测试
逻辑测试
文件测试
--------------------------------------------------------
条件测试
条件测试可以根据某个特定条件是否满足,来选择执行相应的任务。
Bash 中允许测试两种类型的条件:
命令成功或失败,表达式为真或假
任何一种测试中,都要有退出状态(返回值),
退出状态为
0 表示命令成功或表达式为真,
非0 则表示命令失败或表达式为假。
状态变量$? 中保存命令退出状态的值
[root@p ~]# grep pan1 /etc/passwd pan1:x:501:502::/home/pan1:/bin/bash [root@p ~]# echo $? 0 [root@p ~]#
--------------------------------------------------------
测试表达式的值
表达式测试包括字符串测试、整数测试和文件测试。
--------------------------------------------------------
内置测试命令test
l通常用test 命令来测试表达式的值
[root@p ~]# x=5;y=10 [root@p ~]# test $x -gt $y [root@p ~]# echo $? 1 [root@p ~]#
l test 命令可以用方括号 来代替
方括号前后要留空格!
[root@panjinming ~]# x=5;y=10
You have new mail in /var/spool/mail/root
[root@panjinming ~]# [$x -gt $y]
-bash: [5: command not found
[root@panjinming ~]# [ $x -gt $y ]
[root@panjinming ~]# echo $?
1
[root@panjinming ~]#
[root@p ~]# x=5;y=10 [root@p ~]# [$x -gt $y] -bash: [5: command not found [root@p ~]# [ $x -gt $y ] [root@p ~]# echo $? 1 [root@p ~]#
l2.x 版本以上的
Bash 中可以用双方括号来测试表达式的值,此时可以使用通配符进行模式匹配。
[root@panjinming ~]# name=Tom [root@panjinming ~]# [ $name = [Tt]?? ] [root@panjinming ~]# echo $? 1 [root@panjinming ~]# [[ $name = [Tt]?? ]] [root@panjinming ~]# echo $? 0 [root@panjinming ~]#
--------------------------------------------------------
字符串测试 操作符两边必须留空格!
[ -z $str] | 如果字符串 str 长度为 0,返回真 (为0 返回假) |
[ -n $str] | 如果字符串 str 长度为 0,返回假 (不为 0 返回真) |
[ $str1 = $str2 ] | 两字符串相等 |
[ $str1 != $str2 ] | 两字符串不等 |
[root@p ~]# name=Tom [root@panjinmin ~]# [-z $name] -bash: [-z: command not found [root@p ~]# [ -z $name ] [root@p~]# echo $? 1 [root@p ~]# [ -n $name ] [root@p ~]# echo $? 0 [root@p ~]# name2=Andy [root@p ~]# [ $name=$name2 ] ## 操作符两边的空格 [root@p ~]# echo $? 0 [root@p ~]# [ $name!=$name2 ] ##<span style="font-family: Arial, Helvetica, sans-serif;">操作符两边的空格</span> [root@p ~]# echo $? 0 [root@p ~]# [ $name = $name2 ] [root@p ~]# echo $? 1 [root@p ~]# [ $name != $name2 ] [root@p ~]# echo $? 0 [root@panjinming ~]#
--------------------------------------------------------
整数测试
整数测试,即比较大小 操作符两边必须留空格!
[ int1 -eq int2 ] | int1 等于int2 |
[ int1 -ne int2 ] | int1 不等于int2 |
[ int1 -gt int2 ] | int1 大于int2 |
[ int1 -ge int2 ] | int1 大于或等于int2 |
[ int1 -lt int2 ] | int1 小于int2 |
[ int1 -le int2 ] | int1 小于或等于int2 |
$? 0
x=a; [ $x -eq 1 ];echo
$? -bash: [: a: integer expression expected 2
整数测试也可以使用 let命令或双圆括号
==、!=、>、>=、<、<=
x=1; let"$x==1";echo
$? 0
x=1; (($x+1>=
2 ));echo $? 0
两种测试方法的区别
l使用的操作符不同
l let 和双圆括号中可以使用算术表达式,而中括号不能
l let 和双圆括号中,操作符两边可以不留空格
--------------------------------------------------------
逻辑测试
[expr1 -a expr2 ] | 逻辑与,都为真时,结果为真 |
[expr1 -o expr2 ] | 逻辑或,有一个为真时,结果为真 |
[! expr ] | 逻辑非 |
[ $x -eq 1 –a –n
$name ];echo $?
0
注:不能随便添加括号
[($x-eq1)–a
(–n
$name)];echo $?
-bash: syntax error near unexpected token `$x'
可以使用模式的逻辑测试
[[pattern1 && pattern2 ]] | 逻辑与 |
[[pattern1 || pattern2 ]] | 逻辑或 |
[[! pattern ]] | 逻辑非 |
[[ $x -eq 1 && $name
= To? ]];echo $?
0
--------------------------------------------------------
检查空值
[ "$name" = ""
]
[ ! "$name" ]
[ "X${name}"="X"
]
--------------------------------------------------------
文件测试
-f fname | fname 存在且是普通文件时,返回真 ( 即返回 0 ) |
-L fname | fname 存在且是链接文件时,返回真 |
-d fname | fname 存在且是一个目录时,返回真 |
-e fname | fname(文件或目录)存在时,返回真 |
-s fname | fname 存在且大小大于 0 时,返回真 |
-r fname | fname(文件或目录)存在且可读时,返回真 |
-w fname | fname(文件或目录)存在且可写时,返回真 |
-x fname | fname(文件或目录)存在且可执行时,返回真 |
括号总结
括号形式 | 功能说明 |
${...} | 获取变量值 |
$(...) | 命令替换 |
$[...] | 让无类型的变量参与算术运算 |
$((...)) | 同上 |
((…)) | 算术运算 |
[ ... ] | 条件测试,等价于test命令 |
[[ ... ]] | 条件测试,支持模式匹配与通配符 |
总结
q条件测试
q字符串测试
q整数测试
q逻辑测试
q文件测试
相关文章推荐
- linux基础之shell编程(2)-条件判断,算数运算,测试
- 测试基本功训练 - Linux与Shell编程
- Linux新手生存笔记[9]——shell脚本基础2-条件测试及控制流
- Linux条件测试
- Linux学习 -- Shell编程 -- 条件判断
- Linux 脚本 命令状态 条件测试
- shell编程笔记一 条件测试
- 2016-3-6 linux基础学习13——条件判断、文件测试、bash变量类型
- shell编程条件测试
- shell编程:引用变量、内部变量、条件测试、字符串比较、整数比较、文件比较、逻辑操作、引号、通配符、调试执行
- linux中的条件测试
- Unix/Linux Shell 编程笔记——条件测试
- shell编程之条件测试
- Linux新手生存笔记[9]——shell脚本基础2-条件测试及控制流
- linux条件测试
- shell编程:引用变量、内部变量、条件测试、字符串比较、整数比较、文件比较、逻辑操作、引号、通配符、调试执行
- 测试基本功训练 - Linux与Shell编程
- leeboy的linux学习十五 shell中条件测试和简单的条件语句实例
- shell编程之条件测试表达,命令间的逻辑关系式和控制结构的使用以及算术运算
- Linux 条件测试语句