SHELL 学习笔记--test条件测试
时间:2009-03-06 来源:gezn
test条件测试
1 test命令
1)tests命令用于测试字符串,文件状态和数字。Test一般有两种格式。即:test condition或[condition](使用方括号时,要注意咋条件两边加上空格)
2)test 命令的退出状态:0表示成功,其他非0为失败
2 测试文件状态
1)常见的文件状态测试
-b filename :当filename存在并且十块文件时返回真(返回0)
-c filename :当filename存在并且是字符文件时返回真
-d pathname :当pathname存在并且是一个目录时返回真
-e pathname :当由pathname指定的文件或目录存在时返回真
-f filename :当filename存在并且是正规文件时返回真
-g pathname :当pathname指定的文件或目录存在并且设置了SGID位时返回真
-h filename :当filename存在并且是符号链接文件时返回真(或-L filename)
-k pathname :当pathname指定的文件或目录存在并且设置了“粘滞”位时,返回真
-p filename :当filename存在并且是命名管道时返回真
-r pathname :当pathname指定的文件或目录存在并且可读时返回真
-s filename :当filename存在并且文件大小大于0时返回真
-S filename :当filename存在并且是socket时,返回真
-t fd :当gd是与终端设备相关联的文件描述符时返回真
-u pathname : 当由pathname指定的文件或目录存在并且设置了SUID位是返回真
-w pathname :当当由pathname指定的文件或目录存在并且可写时返回真
-x pathname :当由pathname指定的文件或目录存在并且可执行时返回真
-O pathname :当由pathname指定的文件或目录存在并被当前进程的有效用户id的用户拥有时返回真
-G pathname :当由pathname存在并且属于当前进程的有效用户id的用户的用户组时返回真
File 1 –nt file2: file1比file2新时返回真
File 1 –ot file2 :file1 比file2旧时返回真
2)举例
If [-b /dev/hda];then echo “yes”;else echo “no”;fi//将打印yes
Test-c /dev/had; echo $? //将打印表示test命令的返回值为1,/dev/had不是字符设备
[ -w /etc/passwd];echo $? //查看对当前用户而言,passwd文件是否可写
3 逻辑操作符
4 字符串测试
-z string : 字符串string为空串9长度为0)时返回真
-n string :字符串string为非空串时返回真
str1=str2 : 字符串str1和字符串str2相等时返回真
str1<str2 :……….
str1>str2 :…………..
str1!=str2 :
5 测试数值(比较整数)
1)常见数值测试
Int1 –eq int2: 如果int1等于int2,则返回真
Int1 –ne int2: 如果int1不等于int2,则返回真
Int1 –lt int2: 如果int1小于int2,则返回真
Int1 –le int2: 如果int1小于等于int2,则返回真
Int1 –gt int2: 如果int1大于int2,则返回真
Int1 –ge int2: 如果int1大于等于int2,则返回真
1) 举例:x=1;[$x –eq 1];ehco $?//将打印0 表示变量x的值等于数字1
6 expr 用于数值和字符串运算
1)expr Usage:expr expression
2) expr 命令运算完毕后,除了会返回表达式运算的结果外,还会生成一个expr执行状态码表示expr的执行状态。
3) expr的执行状态码
0:表达式结果不是0会null
1: 表达式结果是0或null
2;表示式无效
举例: LOOP=10;expr$LOOP’_’10(表达式$LOOP’_’10的运算结果)
Echo $? //输出结果为1(expr的执行状态码)
2) expression可是一个数值表达式,也可以是一个字符串表达式。可以进行字符串运算。
Eg:expr gezn//将打印gezn
7expr支持的运算符
0) expr的expression中,运算符前后都要留个空格,并且一般最好加上单引号。
1) expr的expression中可使用加(+)减(-)乘(*)除(/)取余(%)运算符
2) …………………………还可以使用两类运算符;
① |:如果第一个单数不是null也不是0,则使用第一个参数为算子,否则使用第二个参数为算子。
&:…………………………………………………………………………否则使用数值0为算子。Eg:a=0;expr $a ‘|’ 4+5 //将打印9
a=6;expr ‘(‘$a ‘&’ 4 ’)’+5 //将打印11
② 比较运算符:<, >,<= >= == !=
8 expr 用于整数运算
1)expr的expression中运算数智能是整数不能是小数。
2)举例: expr’(‘ 2 ‘+’ 3’)’ *2 //将打印10
9 expr可以用来测试一个数,如果试图计算非整数,expr将返回错误信息。
Eg:r=4;expr $r+4 //将打印8