介绍Test
变量测试语句命令,Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
格式:test 测试条件
注意在流程控制语句中,都可以省略test,直接写成[ 测试条件 ]
测试范围:整数,字符串,文件
文章目录
- 一.字符串测试和变量测试
- - 字符串不相等比较
- - 字符串相等比较
- - 字符串是否为空判断
- 二.数值测试
- 三.文件测试
一.字符串测试和变量测试
参数 | 说明 |
| 等于则为真 |
| 不相等则为真 |
| 字符串 字符串长度为零则为真(包括字符串为null的情况) |
| 字符串 字符串长度不为零则为真(包括字符串为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" ]
二.数值测试
参数 | 说明 |
| 等于则为真 |
| 不等于则为真 |
| 大于则为真 |
| 大于等于则为真 |
| 小于则为真 |
| 小于等于则为真 |
例子:测试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
三.文件测试
参数 | 说明 |
| 如果文件存在则为真 |
| 如果文件存在且可读则为真 |
| 如果文件存在且可写则为真 |
| 如果文件存在且可执行则为真 |
| 如果文件存在且至少有一个字符则为真 |
| 如果文件存在且为目录则为真 |
| 如果文件存在且为普通文件则为真 |
| 如果文件存在且为字符型特殊文件则为真 |
| 如果文件存在且为块特殊文件则为真 |
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.判断文件存,且文件内容不为空
也就是说文件必须存在,且内容不能为空时,才符合条件.类似判断普通文件.