脚本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命令 if-then for while 学习笔记

test 文件运算符: -b file  如果文件为一个块特殊文件,则为真 -c file  如果文件为一个字符特殊文件,则为真 -d file  如果文件为一个目录,则为真 -e file  如果文...
  • scdxmoe
  • scdxmoe
  • 2014年04月08日 16:09
  • 1298

Shell脚本的test命令用法

Test命令用来检测某个条件表达式是否成立,根据判断的对象,分为数值测试,字符测试,文件测试和表达式4种。 1.数值测试 数值测试(图片来源) 参数 说明 -eq 等于则为真 ...

Shell脚本test命令使用总结和实例

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则...

Linux test 脚本 shell 命令详解

-b filename 当filename 存在并且是块文件时返回真(返回0) -c filename 当filename 存在并且是字符文件时返回真 -d p...

Shell脚本test命令使用总结

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt ...

shell脚本——test命令的操作使用

test命令的操作使用#!/bin/bash# test命令 # Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。# 数值测试 # -eq 等于则...

玩转Bash脚本:test测试语句

之前写的这篇博文,最近发现讹误太多,又被多家网站(比如推酷,51CTO)转载过了。为避免误人子弟,贻害苍生。今特此更正:关于真值的讨论,尤其关于test测试字符串时的一些错误。还有莫名其妙的 -n 选...

Linux Shell 脚本学习,read、if、test、until记录

最近公司有在ubuntu下脚本编写的模块,所以突击补一下Shell脚本。 Shell脚本介绍: 略,但是要注意,shell脚本的文件后缀名不是那么重要,有或者没有都可以,规范一点就是.sh。但脚本...
  • gopain
  • gopain
  • 2014年03月23日 14:23
  • 1171

linux shell脚本中,关于test测试和if判断中常用的标志[-eq,gt..]

1. 关于某个文档的『文档类型』判断,如 test -e filename 表示存在否 -e 该『文档』是否存在(常用) -f 该『文档』是否存在且为档案(file)(常用) -d 该『文档』是...

Android monkey test 脚本的编写

Android 的 monkey test 工具提供了 -f scriptfile 参数,可以指定 test 脚本,然而翻遍了 Android 的网站也没有找到这个脚本的文档,最终只在 monkey ...
  • quaful
  • quaful
  • 2011年10月11日 20:15
  • 16996
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:脚本test命令
举报原因:
原因补充:

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