Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1159113
  • 博文数量: 221
  • 博客积分: 10152
  • 博客等级: 上将
  • 技术积分: 1518
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-22 10:42
文章分类

全部博文(221)

文章存档

2018年(1)

2015年(6)

2014年(3)

2013年(4)

2012年(1)

2011年(5)

2010年(14)

2009年(10)

2008年(28)

2007年(33)

2006年(114)

2005年(2)

我的朋友

分类:

2006-09-07 17:14:09

一.在bash中使用test命令有3种方式:
(1)test
(2)[]
(3)[[]]
第一跟第二种是等价的,但是第三种就有点区别(个人认为[[]]是[]的增强版)
 
二.test的目的:
测试某个条件是真还是假
然后根据真,假来决定下一步该做什么,典型的就是应用在if中,如:
if [ 1 -eq 1 ];then echo 'true';else echo 'false';fi
 
 
三.有什么好测?
(1)测试文件的特性,如:什么类型,是否存在
(2)测试字符串:2个字符串是否相等,1个字符串是否空,非空
(3)测试2个整数:相等?不等?大于?小于?
(4)逻辑组合:同时,任一,
 
 
(1)测试文件的特性 (具体的内容请看info coreutilis test)
-b file  如果file存在且是xxx属性,此表达式则为真
-c file
-d file
-f file
-h file
-L file
-p file
-S file
-t file
-e file
-s file
-g file
-k file
-r file
-u file
-w file
-x file
-O file
-G file
 
file1 -nt file2
file1 -ot file2
file1 -ef file2
 
(2)测试字符串
-z  string
-n  string
string1 = string2
string1 != string2
string1 \> string2
string1 \< string2
 
 
">", "<"是字符串比较操作符,而不是“算术比较符号”。用于比较字符串的大小,使用字典顺序,与当前的locale有关。
 
string1 \> string2中\>的“反斜杠”,是为了取消>在shell中的特殊意义:重定向
 
如你在cmdline中输入以下:
[ 3 > 2 ]
在看ls命令看看,你当前目录下,是不是多了个“2”文件,因为>在shell中是“重定向”
 
[ 3 \> 2 ]
这个才是字符比较
 
[ 12 \>  3 ]     →→→→→→→   $?的值是1,也就是说上面的条件false,因为这个是字符比较,而不是“数值比较”
 
[ 12 -gt 3 ]     →→→→→→→   $?的值是0,也就是说上面的条件true,因为这个是数值比较,而不是“字符比较”
 
另外[[]]中的==   !=    =   等3个操作符号跟在[]中有所不同
在[[]]中,以上操作符右边的都不再是string,而是parttern
如:
[ 2 = ? ]
$?的值是1,false,因为以上的表示“字符2”是否等于“字符?”,肯定的“字符2”不等于“字符?”
[[ 2 = ? ]]  (详细的信息可以  help [[ )
$?的值为0,true,因为以上的表示“通配符?”是否能够匹配到“字符2”,因为?在shell中是表示一个字符,所以?匹配2,所以$?的值就是o,true
 
(3)算术比较(具体信息man test或者info coreuntils test)
 arg1  -eq  arg2
 arg1  -ne  arg2
 arg1  -lt  arg2
 arg1  -gt  arg2
 arg1  -le  arg2
 arg1  -ge  arg2
 
(4)逻辑组合
 ! expr : 如果expr为假,$?才为0,真
 expr1 -a expr2:expr1跟expr2同时为真时候,$?才为0  真
 expr1 -a expr2:expr1跟expr2任意一个为真时候,$?都为0  真
阅读(1267) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~