利用 test 命令提高您的脚本编制水平

发表于:2007-8-28 14:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:T.Sing    来源:T.Sing'Blog

  正如开头所提到的,除了使用 test 外,您还可以用方括号 [ ] 将命令括住来向 shell 发出同样的命令 — 如下所示:

$ [ -w evan ]$ echo $?0$ [ -x evan ]$ echo $?1$

  同样,第一个表达式为真,第二个表达式为假 — 正如返回值所指示的那样。您还可以使用以下命令将两个文件彼此进行比较:

file1 -ef file2 测试以判断两个文件是否与同一个设备相连,是否拥有相同的 inode 编号
file1 -nt file2 测试以判断第一个文件是否比第二个文件更新(由修改日期决定)
file1 -ot file2 测试以判断第一个文件是否比第二个文件更旧

  以下示例显示了使用这些运算符比较文件的结果:

$ [ evan -nt spencer ]$ echo $?0$ [ karen -ot spencer ]$ echo $?1$

  名为 evan 的文件比名为 spencer 的文件更新,因而评估为真。类似地,名为 karen 的文件比名为 spencer 的文件更新,因此该评估为假。

字符串比较运算符

  如标题所示,这组函数比较字符串的值。您可以检查它们是否存在、是否相同或者是否不同。

String 测试以判断字符串是否不为空
-n string 测试以判断字符串是否不为空;字符串必须为 test 所识别
-z string 测试以判断字符串是否为空;字符串必须为 test 所识别
string1 = string2 测试以判断 string1 是否与 string2 相同
string1 != string2 测试以判断 string1 是否与 string2 不同

  对任何变量进行的最有用的测试之一是判断它的值是否不为空,可以简单地将其放在 test 命令行中执行这种测试,如下例所示:

$ test "$variable"

  强烈建议进行此种测试时用双引号将变量括住,以让 shell 识别变量(即使变量为空)。默认情况下执行的基本字符串评估和 -n 测试从功能上讲是相同的,如以下示例所示:

#example1if test -n "$1"   thenecho "$1"      fi

  执行以上例子中的代码将根据 $1 是否存在给出以下结果:

$ example1 fridayfriday$$ example1$

  如果将代码更改为以下形式,则结果将相同:

  #example2if test "$1"   thenecho "$1"      fi

  如下所示:

$ example2 fridayfriday$$ example2$

  所有这些表明,通常不需要 -n,它代表默认操作。

  要从一个不同的角度来查看各种可能性,您可以用另一个选项来替换 -n,并检查该值是否为空(相对于空)。这可以用 -z 选项来实现,代码为:

#example3if test -z "$1"               thenecho "no values were specified"  fi

运行如下:

$ example3               no values were specified $ example3 friday$

  如果在没有命令行参数的情况下运行该程序,而表达式评估为真,那么将执行程序块中的文本。如果在命令行中有值,则脚本退出,不执行任何操作。将评估操作放在脚本的开头非常有用,这可以在可能产生错误的进一步处理之前预先检查变量值。

  其余的字符串运算符对两个变量/字符串之间的精确匹配或其中的差异(您也可以称之为等价性和“不等价性”)进行评估。第一个例子对匹配进行测试:

$ envLOGNAME=emmettPAGER=lessSHELL=/bin/bashTERM=linux$$ [ "$LOGNAME" = "emmett"  ]$ echo $?0$$ [ "$LOGNAME" = "kristin"  ]$ echo $?1$

  或者,该评估可以以脚本的形式用于决定是否运行脚本:

#example4if [ "$LOGNAME" = "emmett" ]thenecho "processing beginning"else echo "incorrect user"fi

  这种方法可以用来寻找任意的值(如终端类型或 shell 类型),在允许脚本运行之前这些值必须匹配。请注意,= 或 != 运算符的优先级高于其它大多数可指定选项,且要求必须伴有表达式。因此,除了比较字符串的选项之外,= 或 != 都不能和检查某种东西(如可读文件、可执行文件或目录)的存在性的选项一起使用。

整数比较运算符

  正如字符串比较运算符验证字符串相等或不同一样,整数比较运算符对数字执行相同的功能。如果变量的值匹配则表达式测试为真,如果不匹配,则为假。整数比较运算符不处理字符串(正如字符串运算符不处理数字一样):

int1 -eq int2 如果 int1 等于 int2,则为真
int1 -ge int2 如果 int1 大于或等于 int2,则为真
int1 -gt int2 如果 int1 大于 int2,则为真
int1 -le int2 如果 int1 小于或等于 int2,则为真
int1 -lt int2 如果 int1 小于 int2,则为真
int1 -ne int2 如果 int1 不等于 int2,则为真

32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号