一.在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 真
阅读(1262) | 评论(0) | 转发(0) |