第17章.条件测试
时间:2008-09-27 来源:zwc0819
[root@test zwc]# ls
aaa awk dht fruits guote2.txt sedex.txt
abc change.sed dos.sed func.text guote.txt sed.out
append.sed dd dos.txt grade.txt mix.sed sql.txt
as Desktop filedt guote1.txt sed video.txt
1.测试文件状态
[root@test zwc]# ls -l as
-rw-r--r-- 1 root root 32 9月 10 19:07 as
a.测试文件是否可写并用最后退出命令测试是否成功.
[root@test zwc]# test -w as
[root@test zwc]# echo $?
0
b.测试文件是否可执行并用最后退出命令测试是否成功.
[root@test zwc]# test -x as
[root@test zwc]# echo $?
1
2.测试时使用逻辑操作符
[root@test zwc]# ls -l aaa abc
-rwxr--r-- 1 root root 55 9月 4 22:02 aaa
-rwxr-xr-x 1 root root 46 9月 4 21:39 abc
a.测试两个文件是否均可写
[root@test zwc]# test -w aaa -a -w abc
[root@test zwc]# echo $?
0
b.测试其中一个是否可执行
[root@test zwc]# test -x aaa -o -x abc
[root@test zwc]# echo $?
0
[root@test zwc]# chmod -x abc
[root@test zwc]# ls -l aaa abc
-rwxr--r-- 1 root root 55 9月 4 22:02 aaa
-rw-r--r-- 1 root root 46 9月 4 21:39 abc
[root@test zwc]# test -x aaa -o -x abc
[root@test zwc]# echo $?
0
c.测试文件abc是否可写,可执行
[root@test zwc]# [ -w abc -a -x abc ]
[root@test zwc]# echo $?
1
3.字符串测试
a.测试环境变量EDITOR是否为空
[root@test zwc]# test -z $EDITOR
[root@test zwc]# echo $?
0
b.非空,取值是否是vi
[root@test zwc]# test $EDITOR = "vi"
bash: test: =: unary operator expected
[root@test zwc]# test "$EDITOR" = "vi"
[root@test zwc]# echo $?
1
c.不是,用echo命令反馈其值
[root@test zwc]# echo $EDITOR
d.测试两个变量是否相等
[root@test zwc]# TAPE="/dev/rmt0"
[root@test zwc]# TAPE2="/dev/rmt1"
[root@test zwc]# echo $TAPE
/dev/rmt0
[root@test zwc]# echo $TAPE2
/dev/rmt1
[root@test zwc]# test "$TAPE" = "$TAPE2"
[root@test zwc]# echo $?
1
e.测试变量tape与tape2是否不相等
[root@test zwc]# test "$TAPE" != "$TAPE2"
[root@test zwc]# echo $?
0
4.测试数值
一般格式为:
[ "number" "number_operate" "number" ]
number_operate可为:
-eq 数值相等
-ne 数值不相等
-gt 第一个数大于第二个数
-lt 第一个数小于第二个数
-le 第一个数小于等于第二个数
-ge 第一个数大于等于第二个数
a.测试两个数字是否相等
[root@test zwc]# NUMBER=130
[root@test zwc]# [ "$NUMBER" -eq "130" ]
[root@test zwc]# echo $?
0
b.改变第二个数,结果返回失败,状态为1
[root@test zwc]# [ "$NUMBER" -eq "100" ]
[root@test zwc]# echo $?
1
c.测试130是否大于100
[root@test zwc]# [ "$NUMBER" -gt "100" ]
[root@test zwc]# echo $?
0
d.测试两个整数变量
[root@test zwc]# DEST_COUNT=15
[root@test zwc]# SOURCE_COUNT=13
[root@test zwc]# [ "$DEST_COUNT" -gt "$SOURCE_COUNT" ]
[root@test zwc]# echo $?
0
e.可以不比将整数值放入变量,直接用数字即刻,但要加引号
[root@test zwc]# [ "990" -le "995" ]
[root@test zwc]# echo $?
0
f.可以用逻辑操作符将两个测试表达式结合起来
[root@test zwc]# [ "990" -le "995" -a "123" -gt "100" ]
[root@test zwc]# echo $?
0
5.expr用法
[root@test zwc]# expr 10 + 10
20
[root@test zwc]# expr 900 + 100
1000
[root@test zwc]# expr 30 / 3
10
[root@test zwc]# expr 30 / 3 / 2
5
[root@test zwc]# expr 30 - 2
28
[root@test zwc]# expr 30 \* 3
90
a.增量计数
[root@test zwc]# LOOP=0
[root@test zwc]# LOOP=`expr $LOOP + 1`
[root@test zwc]# echo $LOOP
1
b.数值测试
可以用expr测试一个数.如果试图计算非整数,将返回错误
[root@test zwc]# expr 0.3 + 1
expr: non-numeric argument
[root@test zwc]# VALUE=12
[root@test zwc]# expr $VALUE + 10 > /dev/null
[root@test zwc]# echo $?
0
[root@test zwc]# VALUE=hello
[root@test zwc]# expr $VALUE + 10 > /dev/null
expr: non-numeric argument
expr也可疑返回其本身的推出状态,成功返回1,其他值为无效或错误
[root@test zwc]# VALUE=hello
[root@test zwc]# expr $VALUE = "hello"
1
[root@test zwc]# echo $?
0
c.模式匹配
[root@test zwc]# VALUE=accounts.doc
[root@test zwc]# expr $VALUE : '\(.*\).doc'
accounts
[root@test zwc]# expr $VALUE : '.*'
12