第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
  










