Chinaunix首页 | 论坛 | 博客

14#

  • 博客访问: 130987
  • 博文数量: 48
  • 博客积分: 1910
  • 博客等级: 上尉
  • 技术积分: 445
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-27 10:38
文章存档

2012年(8)

2011年(2)

2010年(13)

2009年(25)

我的朋友

分类: Python/Ruby

2010-02-02 22:51:08

 

测试字符串,文件 使用[[]] ;测试数值计算结果 使用(())

 

 

 

1. [[ ]] 表达式,测试字符串和文件

  

   用来扩展测试命令, 因为这种表现形式可能对某些语言的程序员来说更容易熟悉一些.是一个关键字, 并不是一个命令.

   使用[[]]而不使用[] 原因有:

     1)能够防止脚本中的许多逻辑错误:&&, ||(而不是使用 –a –o ,与bash统一)

          <, > 操作符能够正常存在于[[ ]]条件判断结构中, 但是如果出现在[ ]结构中的话, 会报错.

       2 阻止分词  // [] 需要加双引号

     3 $a>$b

 

   1.1 字符串测试

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

测试                         意义

[[  -z $str  ]]          字符串为"null", 意思就是字符串长度为零,即和空格是有区
[[  -n $str  ]]         
字符串不为"null" 
[[ $str1 == $str2 ]]    
相等, 两侧一定要有空
[[ $str1 = $str2 ]]     
同上
[[ $str1 != $str2 ]]    
不等,两侧一定要有空格

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

注意点:1)表达式和[[]]之间要有空格

2[[]]中如果不是表达式或文件测试就看成字符串然后 -n 即可得出答案如果有!

可以理解为 ! -n  eg:[[ ! "hello" ]]

3)比较关系两侧无空格相当于 [[一个字符串]]

4) [[]] 可以避免 []中的忘记测试的变量引用起来带来的坏处,但还是养成好习惯加上引用

          [ -n $xy ] && echo suc   #  + '[' -n ']'   + echo suc     suc

[ -n  "$xy" ] && echo suc   #  + '[' -n '' ']' 

 

 

   2.1 文件测试

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

 

用法             意义        用法             意义

 

[[ -b $file ]]   块设备      [[ -r $file ]]    文件可读
[[ -c $file ]]   字符设备    [[ -s $file ]]    文件大小不为零
[[ -d $file ]]   目录        [[ -w $file ]]    文件可写
[[ -e $file ]]   文件存在    [[ -x $file ]]    文件可执行
[[ -f $file ]]   普通文件    [[ -p $file ]]    命名管道

 

 

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

 

 

2. ((     ))     表达式,测试数值计算结果

 

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

用法  意义

 

>     大于
>=    大于等于
<     小于
<=    小于等于
==    等于

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

 

注意点:1)表达式和[[]]之间无需空格

2) 关系操作符两侧也无需有空格

3) (( )) 中使用 <  >  <=   >=  = =   #abs里漏了 = =操作符, 但是 =号不支持,在算式表达式中被理解为赋值.

4) 字符串比较使用 [[ ]]  不能使用 (( )) 原因是在(( )) 是扩展并计算一个算术表达式的值, NULL字符串(即没定义或为空的字符串)会转换为0

5)(())只支持整型比较

3.浮点数测试

由于(())只支持整型比较,

$ [[ 12 > 3 ]]  && echo ok || echo no # no  字符比较,输出错误结果

 

解决之道:

1)    bc

echo "2.1> 3.22" | bc   #(( 1==$(echo "2.1> 3.22" | bc) )) && echo ok || echo no

2)  awk

awk -v a=0.7 -v b=0.5 'BEGIN{print(a>b)?"a is big":"b is big"}'

 

阅读(352) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~