脚本test命令

转载 2011年01月19日 20:13:00

10.1.2 使用test

更常见的情况是,提供给if语句的清单是一个或更多个test命令,它们通过调用test命令而被激活,语法如下:

test expression

这里,expression为test命令构造的表达式,该表达式的构造使用了特殊选项之一.在计算完表达式的值后,test命令或者返回0(真)或者返回1(假).

可用"["命令对test命令进行缩写:

[ expression ]

这里expression是test命令可以理解的任何有效表达式,该简化格式将是读者可能会踫见的最常用格式.

test可理解的表达式类型分为三类:

文件测试.
字符串比较.
数字比较.

读者将逐步学业习这三类,另外,还会学习到复合表达式.

注意:在使用"["简写test时,左中括号后面的空格和右括号前面的空格是必需的,如果没有空格,Shell不可能辨别表达式何时开始何时结束.

选项 描述
-b file 若文件存在且是一个块特殊文件,则为真
-c file 若文件存在且是一个字符特殊文件,则为真
-d file 若文件存在且是一个目录,则为真
-e file 若文件存在则为真
-f file 若文件存在且为一个规则文件则为真
-g file 若文件存在且设置了SUID位的值,则为真
-h file 若文件存在且为一个符号链接,则为真
-k file 若文件存在且设置了"sticky"位的值,则为真
-p file 若文件存在为已命令管道,则为真
-r file 若文件存在且可读,则为真
-s file 若文件存在且其大小大于零,则为真
-w file 若文件存在且设置了SUID位的值,则为真
-x file 若文件存在且可执行,则为真
-o file 若文件存在且被有效用户ID所拥有,则为真

1.文件测试

文件测试表达式检查是否一个文件满足某种特殊规则.文件测试的通用语法为:

test option file

[ option file ]

这里optionj 上表给出的一个选项,file是文件或目录名.

下面看一些if语句的实例,这些实例使用了test命令执行文件测试.

考虑如下if语句:

$if [ -d /home/ranga/bin ]; then PATH = "$ PATH:/home/ranga/bin"; fi

这里,测试了目录/home/ranga/bin是否存在,若存在,将其增加到变量 PATH 上.在Shell初始化脚本 如.profile或.kshrc中常见类似语句.

假设想在$HOME/.bash_aliai文件存在时执行存储在其中的命令,可使用命令:

$if [ -f $HOME/./bash_aliai ]; then $HOME/.bash_aliai; fi

对该命令的一个改进是:增加测试该文件是否有内容这一功能,若有,则执行其中的命令.可使用-s选项代替-f选项改变该命令得到这样的结果.

if [-s $HOME/.bash_aliai ];  then $HOME/.bash_aliai; fi

现在,若文件存在且有一些内容,则执行存储在文件$HOME/.bash_aliai中命令.

2.字符串比较

test命令也运行简单的字符串比较,主要存在两种格式:

1) 检查是否字符串为空

2)  检查是否两个字符串相等

字符串不能使用test命令直接与一个表达式进行比较.若这样,则要用case语句代替.

写字符串比较有关的test选项在下表给出:

选项 描述
-z string 若string长度为0,则为真
-n string 若string长度不为0,则为真
string! = string2 若两个字符串相等,则为真
string1 != string2 若两个字符串不等,则为真

检查是否字符串为空

第一种格式的语法为:

test option string

[ option string ]

这里option或者是-z或者是-n,string为任何有效的Shell字符串,-z选项(zero的首字母)检查是否字符串长度为0,而-n选项检查是否字符串长度不为0.

例如,如下命令:

if [ -z "$FRUIT _BASKER" ] ; then
echo "Your fruit basket is empty";
else
echo "your fruit basket has the following fruit; $FRUIT_BASKET"
fi

若包含在变量$FRUIT_BASKET的字符串长度为0,则产生字符串:

Your fruit basket is empty

若要使用-n选项代替-z选项,本例变为:

if [ -n "$FRUIT_BASKET" ]  ; then
echo "Your fruit basket has the following fruit:$FRUIT_BASKET"
else
echo "Your fruit basket is emtpy";
fi

注意在本例中引用了变量$FRUIT_BASKET.当变量被删除这种事件发生时,要求这样做,否则若$FRUIT_BASKET未引用,则当其被删除时产生出错信息:

test: argument expected

由于Shell没有引用$FRUIT.BASKET的空值,所以就会存在这样的出错信息,这种情况下,该测试语句将类似于:
[-z ]

由于丢失了字符串参数,test命令提示用户丢失了一个必需的参数.通过对$FRUIT_BASKET的引用,该test命令将类似于:

[-z " "]

这里,必需的字符串参数为" ".

检查是否两个字符串相等

test命令可以确认两个字符串是否相等.若两个字符串包含确切相同的字符,则主为是相等的,如,字符串:

"There are more things in heaven and earth"

"There are more things in heaven and earth"

是相等的,但字符串

"than are dreamt of in your philosophy"

"Than are dreamt of in your Philosophy"

由于在首字母大小写不同,所以是不相等的.

检查两个字符串是否相等的基本语法是:

test string1 = string2

[ string1=string2 ]

这里,string1和string2是两个要比较的字符串.

下面给出一个使用字符串进行比较的一个简单例子:

if  [ "$FRUIT" = apple ]; then
echo "An apple a day keeps the doctor away."
else
echo "You must like doctors,your fruit $FRUIT is not an apple."
fi

若用 "!="操作符代替 "=",则test在两个字符串不等时则返回真,可用 "!="重写前面的命令如下:

if [ "$FRUIT" != apple ] ; then
echo "You must like doctors,your fruit $FRUIT is not an apple."
else
echo "An apple a day keeps the doctor away."
fi

shell脚本编程<三>:test命令

test命令格式如下:if test condition then command fi关于test还可以用[]代替,格式如下,注意[]前括号后,后括号前必须有空格if [ condition...
  • MonroeD
  • MonroeD
  • 2016年01月02日 13:58
  • 322

xcode6 命令行运行单元测试unit test

网上很多信息说xcode4.5版本以后不支持命令行运行unit test。其实这种说法有误。 官方文档: 应用xcodebuild test 命令行运行测试用例 https://developer...
  • viewcode
  • viewcode
  • 2015年08月14日 14:49
  • 2841

shell脚本:使用if-then语句和test命令

一、基本结构化命令if-then语句格式:if command then command fibash shell的if语句会运行if后面的那个命令。如果该命令的退出状态码是0(该命令成功运...
  • weixin_36586564
  • weixin_36586564
  • 2017年12月19日 15:27
  • 162

Linux下test命令使用

test命令格式:  test condition 通常,在if-then-else语句中,用[]代替,即[ condition ]。注意:方括号两边都要用空格。   1、数值比较  ...
  • zqixiao_09
  • zqixiao_09
  • 2016年05月15日 16:32
  • 1460

书写优雅的shell脚本(六)- shell中的命令组合(&&、||、())

shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中。当 $? == 0 时,表示执行成功;当 $? == 1 时,表示执行失败。  有时候,下一条命令...
  • xyls12345
  • xyls12345
  • 2014年09月04日 16:27
  • 3054

Test Batch Runner使用教程(图文详解)

其实对于自动化批量运行测试脚本这事儿其实很容易只是读者没有认真的去研究去尝试这个方向所以觉得很难,或者不知道该怎样去做这个批量执行自动化,但是自动化的灵魂就是尽可能少的解放手工,能够有更多的时间完成更...
  • u012083589
  • u012083589
  • 2014年12月08日 11:23
  • 354

【Linux】test命令

检测系统是否包含某些文件或者相关属性时,test命令是个很好的命令, 加上 && 及 || 还能更人性化地显示结果 # test -e new && echo "exist" || echo "no...
  • michellechouu
  • michellechouu
  • 2015年09月16日 15:49
  • 312

hdfs test 命令

有时候需要写一个脚本测试hdfs中的某个文件或者目录是否存在,比如当接收机发现磁盘分区剩余空间已经到了危险值的时候,需要首先测试一下是否日志已经存入HDFS目录,如果是,则可以删除接收机上的本地日志文...
  • sheismylife
  • sheismylife
  • 2014年10月19日 15:59
  • 3184

自动化测试脚本的编写和执行——自动执行cts测试10遍

今天解cts测试的bug,但是它是random fail,于是希望通过自动执行多遍,并抓下fail时的log进行解析。 1.编写脚本 自动执行的脚本如下: #!/sbin/sh chmod +...
  • holdrise
  • holdrise
  • 2012年12月29日 15:11
  • 3756

ksh 向脚本传递参数

-- Start 方法1 如果你的脚本只需要很少的参数,你可以通过 $1,$2 ... $9 直接引用它们。注意,如果你的参数多于 9 个,不能使用 $10 来引用第十个参数。下面是一个简单的例子。 ...
  • shangboerds
  • shangboerds
  • 2015年09月21日 21:34
  • 1272
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:脚本test命令
举报原因:
原因补充:

(最多只允许输入30个字)