(6)Linux ----- Shell编程条件测试 ---- ④

--------------------------------------------------------

条件测试
字符串测试
整数测试
逻辑测试
文件测试

--------------------------------------------------------

条件测试

条件测试可以根据某个特定条件是否满足,来选择执行相应的任务。

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 ~]# 

l 2.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


x=1; [ $x -eq ];echo $?   0

x=a; [ $x -eq ];echo $?    -bash: [: a: integer expression expected   2


整数测试也可以使用 let命令或双圆括号

        ==!=>>=<<=

x=1; let"$x==1";echo $?          0

x=1; (($x+1>= 2 ));echo $?      0


两种测试方法的区别
l使用的操作符不同
let 和双圆括号中可以使用算术表达式,而中括号不能
l   let 和双圆括号中,操作符两边可以不留空格

--------------------------------------------------------

逻辑测试

[expr1 -a expr2 ]

逻辑,都为真时,结果为真

[expr1 -o expr2 ]

逻辑,有一个为真时,结果为真

[! expr ]

逻辑


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'


可以使用模式的逻辑测试

[[pattern1 && pattern2 ]]

逻辑

[[pattern1 || pattern2 ]]

逻辑

[[! pattern ]]

逻辑


x=1; name=Tom;

[[ $x -eq &&  $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文件测试



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值