介绍
Test 变量测试语句命令,Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
格式:
test 测试条件 注意在流程控制语句中,都可以省略test,直接写成[ 测试条件 ]测试范围:
整数,字符串,文件


文章目录

  • 一.字符串测试和变量测试
  • - 字符串不相等比较
  • - 字符串相等比较
  • - 字符串是否为空判断
  • 二.数值测试
  • 三.文件测试


一.字符串测试和变量测试

参数

说明

= 或者==

等于则为真

!=

不相等则为真

-z

字符串 字符串长度为零则为真(包括字符串为null的情况)

-n

字符串 字符串长度不为零则为真(包括字符串为null的情况)

注意点:
1.比较符号用==或者=等价,但是要注意的是等号两侧有空格.这是unix shell的要求.
2.[]的两侧也应该有空格.
3.待比较的变量是$param还是用来表示"$param",这里主要的区别在于如果变量param之前没有定义的时候,$param获取到的值可以理解成java中的null值,而后者"$param"获取到的值为""空字符串.

- 字符串不相等比较
#! /bin/bash

param='test2'

if [ "$param"  != 'test' ] ; then
        echo 'param != test'
fi

结果:

[root@yveshe ~]# ./strTest.sh 
param != test
- 字符串相等比较
#! /bin/bash


if [ $param  = 'test' ] ; then
        echo 'param = test'
else
        echo 'param != test'
fi

要确保变量param之前是没有定义.以上代码执行结果为:

[root@yveshe ~]# ./strTest.sh 
./strTest.sh: line 4: [: =: unary operator expected
param != test

我们再来看下改用"$param"时的情况

#! /bin/bash


if [ "$param"  = 'test' ] ; then
        echo 'param = test'
else
        echo 'param != test'
fi

以上代码的运行结果为:

[root@yveshe ~]# ./strTest.sh 
param != test

总结:
如果在没有定义变量的时候使用变量的时候才会出现错误,为了避免我们再判断两个字符串是否相等的时候我们尽量用"$param"来获取字符串的值后做比较比较可靠.另外一种解决办法是在获取值后面添加一个固定的字符来使得获取不为null,比如[ ${param}x = "test"x ],这里的字符x就是额外添加的,这样param在没有定义的情况下也不会报错.

- 字符串是否为空判断

1.判断为空

#! /bin/bash

if [ -z $param ] ; then
        echo 'param is empty!'
fi

结果:
param is empty!

#! /bin/bash

param=

if [ -z $param ] ; then
        echo 'param is empty!'
fi

结果:
param is empty!

#! /bin/bash

param=''

if [ -z $param ] ; then
        echo 'param is empty!'
fi

结果:
param is empty!

#! /bin/bash

if [ -z "$param" ] ; then
        echo 'param is empty!'
fi

结果:
param is empty!

#! /bin/bash

param=''

if [ -z "$param" ] ; then
        echo 'param is empty!'
fi

结果:
param is empty!

总结:
-z str这里的str判断为空的依据是包括空串和null的,也就是说获取得到的值为""或者null时都为真.

2.判断不为空:

#! /bin/bash

if [ -n $param ] ; then
        echo 'param is not empty!'
fi

结果:
param is not empty!

#! /bin/bash

param=

if [ -n $param ] ; then
        echo 'param is not empty!'
fi

结果:
param is not empty!

#! /bin/bash

if [ -n "$param" ] ; then
        echo 'param is not empty!'
fi

结果:
无结果输出

#! /bin/bash

param=

if [ -n "$param" ] ; then
        echo 'param is not empty!'
fi

结果:
无结果输出

总结:
1.param=不赋具体的值时完全的等价于没有定义变量.
2.$param不加双引号时只是获取值,可能为null值,比如第1点中的情况下就为null值,而"$param"获取得到的值永远不为null,在第1点情况下的值为"".
建议获取是条件写成[ -n "$param" ]

二.数值测试

参数

说明

-eq

等于则为真

-ne

不等于则为真

-gt

大于则为真

-ge

大于等于则为真

-lt

小于则为真

-le

小于等于则为真

例子:测试num1和num2是否相等

#! /bin/bash

num1=1
num2=2

if [ $num1 -eq $num2 ]
then
        echo 'num1=num2'
else
        echo 'num1!=num2'
fi

结果:

[root@yveshe ~]# ./numTest.sh 
num1!=num2

三.文件测试

参数

说明

-e 文件名

如果文件存在则为真

-r 文件名

如果文件存在且可读则为真

-w 文件名

如果文件存在且可写则为真

-x 文件名

如果文件存在且可执行则为真

-s 文件名

如果文件存在且至少有一个字符则为真

-d 文件名

如果文件存在且为目录则为真

-f 文件名

如果文件存在且为普通文件则为真

-c 文件名

如果文件存在且为字符型特殊文件则为真

-b 文件名

如果文件存在且为块特殊文件则为真

1.判断文件是否存在

#! /bin/bash

if [ -e /root/file.sh ] ; then
        echo 'file.sh exis.'
fi

结果:
file.sh exis.

2.判断文件是否为目录

#! /bin/bash

if [ -d /root ] ; then
        echo 'root is directory.'
fi

结果:
root is directory.

3.判断文件为普通文件
注意,即使文件不存在也不会报错,只有当存在且是普通文件时才会执行echo 'file.sh is file.'

#! /bin/bash

if [ -f /root/file.sh ] ; then
        echo 'file.sh is file.'
fi

结果:
file.sh is file.

4.判断文件存,且文件内容不为空
也就是说文件必须存在,且内容不能为空时,才符合条件.类似判断普通文件.