Chinaunix首页 | 论坛 | 博客
  • 博客访问: 202566
  • 博文数量: 37
  • 博客积分: 4624
  • 博客等级: 上校
  • 技术积分: 433
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-10 14:06
文章分类

全部博文(37)

文章存档

2012年(6)

2011年(25)

2008年(6)

我的朋友

分类: LINUX

2011-12-21 13:13:45

对文件、字符串和数字使用test命令。

对数字和字符串使用expr命令。

使用最后退出状态命令$?可测知testexpr,二者均以0表示正确,1表示返回错误。

 

1.1.        测试文件状态

test一般有两种格式,使用方括号时,要注意在条件两边加上空格:

test condition

[ condition ]

 

常用测试文件状态的条件表达式:

-d 目录

-f 文件

-L 符号连接

 

-r 可读

-w 可写

-x 可执行

 

-s 文件长度大于0、非空

-u 文件有suid位设置

 

例如:

$ ll

总用量 16

drwxrwxr-x 3 wuzhiguo wuzhiguo 4096 2011-12-21 11:46 ./

drwxrwxr-x 7 wuzhiguo wuzhiguo 4096 2011-12-12 11:07 ../

-rw-rw-r-- 1 wuzhiguo wuzhiguo    0 2011-12-20 17:30 dst.txt

drwxrwxr-x 2 wuzhiguo wuzhiguo 4096 2011-12-21 11:46 mydir/

-rwxrwxrwx 1 wuzhiguo wuzhiguo  245 2011-12-21 10:00 my.sh*

lrwxrwxrwx 1 wuzhiguo wuzhiguo    5 2011-12-21 11:45 myshln -> my.sh*

-rw-rw-r-- 1 wuzhiguo wuzhiguo    0 2011-12-20 17:29 src.txt

$ test -d mydir

$ echo $?

0

$ test -f src.txt

$ echo $?

0

$ test -f mydir

$ echo $?

1

$ test -L myshln

$ echo $?

0

$ test -r src.txt

$ echo $?

0

$ echo -w src.txt

-w src.txt

$ test -w src.txt

$ echo -w src.txt

-w src.txt

$ echo $?

0

$ test -x src.txt

$ echo $?

1

$ test -s src.txt

$ echo $?

1

$ [ -d mydir ]

$ echo $?

0

 

测试时使用逻辑操作符:

-a 逻辑与

-o 逻辑或

! 逻辑否

$ [ -d mydir -a -f src.txt ]

$ echo $?

0

$ [ -d mydir -o -f src.txt ]

$ echo $?

0

$ [ ! -d src.txt ]

$ echo $?

0

$ [ ! -f src.txt ]

$ echo $?

1

 

$ test -d mydir -a -f src.txt

$ echo $?

0

$ test -d mydir -a -d src.txt

$ echo $?

1

$ test ! -d mydir

$ echo $?

1

 

1.2.        字符串测试

字符串测试

字符串测试是错误捕获很重要的一部分,特别在测试用户输入或比较变量时尤为重要。

字符串测试有5种格式:

test "string"

test string_operator "string"

test "string" string_operator "string"

[ string_operator "string" ]

[ "string" string_operator "string" ]

 

这里,stringoperator可为:

= 两个字符串相等。

!= 两个字符串不等。

-z 空串。

-n 非空串。

 

例如:

$ str1=12345

$ str2=45678

$ str3=12345

$ str4=

$ [ $str1 = "12345" ]

$ echo $?

0

$ [ $str1 != "12345" ]

$ echo $?

1

$ [ $str1 == $str2 ]

$ echo $?

1

$ [ $str1 != $str2 ]

$ echo $?

0

$ [ -z $str1 ]

$ echo $?

1

$ [ -z $str4 ]

$ echo $?

0

$ [ -z "" ]

$ echo $?

0

$ [ -n $str1 ]

$ echo $?

0

$ [ -n "" ]

$ echo $?

1

$ test $str1 = $str2

$ echo $?

1

$

 

1.3.        测试数值

测试数值可以使用许多操作符,一般格式如下:

test "number" numericoperator "number"

或者

[ "number" numericoperator "number" ]

numericoperator 可为:

-eq 数值相等。

-ne 数值不相等。

-gt 第一个数大于第二个数。

-lt 第一个数小于第二个数。

-le 第一个数小于等于第二个数。

-ge 第一个数大于等于第二个数。

 

例如:

$ [ 123 -eq 123 ]

$ echo $?

0

$ [ 123 -ne 123 ]

$ echo $?

1

$ [ 123 -gt 123 ]

$ echo $?

1

$ [ 123 -lt 123 ]

$ echo $?

1

$ [ 123 -ge 123 ]

$ echo $?

0

$ [ 123 -le 123 ]

$ echo $?

0

$ [ "123" -le "123" ]

$ echo $?

0

$ [ "555" -le "12345" ]

$ echo $?

0

$

 

1.4.        expr用法

expr命令一般用于整数值,但也可用于字符串。一般格式为:

expr argument operator argument

 

expr也是一个手工命令行计数器。:

$ expr 10 + 10

20

$ expr 100/3/3

100/3/3

$ expr 100 / 3 / 3

11

$ expr 2 \* 3

6

 

增量计数:

expr在循环中用于增量计算。首先,循环初始化为0,然后循环值加1,反引号的用法意即替代命令。最基本的一种是从expr命令接受输出并将之放入循环变量。

$ LOOP=0

$ LOOP=`expr $LOOP + 1`

$ echo $LOOP

1

 

数值测试:

可以用expr测试一个整数。如果试图计算非整数,将返回错误。

$ N=123

$ expr $N + 1 > /dev/null 2>&1

$ echo $?

0

$ N=aaa

$ expr $N + 1 > /dev/null 2>&1

$ echo $?

2

 

$ M=123

$ expr $M + 1

124

$ echo $?

0

$ M=aaa

$ expr $M + 1

expr: non-integer argument

$ echo $?

2

 

expr也可以返回其本身的退出状态,不幸的是返回值与系统最后退出命令刚好相反,成功返回1,任何其他值为无效或错误。下面的例子测试两个字符串是否相等,expr返回1。不要混淆了,这表明成功。现在检验其最后退出状态,返回0表示测试成功。

$ str="hello"

$ expr $str = "hello"

1

$ echo $?

0

 

模式匹配:

$ filename=accounts.doc

$ expr $filename : '.*'

12

$ expr $filename : '\(.*\).doc'

accounts

$ expr $filename : '.*\(.doc\)'

.doc

这个还是不太懂,貌似()是提取的意思,先记下来。

阅读(1038) | 评论(0) | 转发(0) |
0

上一篇:shell脚本介绍

下一篇:控制流结构

给主人留下些什么吧!~~