Linux 技巧: Bash 测试和比较函数

发表于:2008-2-22 13:36

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

 作者:未知    来源:网络转载

#
Linux

  您是否为 Bash shell 中大量的测试和比较选项而困惑呢?这个技巧可以帮助您解密不同类型的文件、算术和字符串测试,这样您就能够知道什么时候使用 test、 [ ]、 [[ ]]、 (( )) 或 if-then-else 了。
  Bash shell 在当今的许多 Linux® 和 UNIX® 系统上都可使用,是 Linux 上常见的默认 shell。Bash 包含强大的编程功能,其中包括丰富的可测试文件类型和属性的函数,以及在多数编程语言中可以使用的算术和字符串比较函数。理解不同的测试并认识到 shell 还能把一些操作符解释成 shell 元字符,是成为高级 shell 用户的重要一步。这篇文章摘自 developerWorks 教程 LPI 102 考试准备,主题 109: Shell、脚本、编程和编译,介绍了如何理解和使用 Bash shell 的测试和比较操作。

  这个技巧解释了 shell 测试和比较函数,演示了如何向 shell 添加编程功能。您可能已经看到过使用 && 和 || 操作符的简单 shell 逻辑,它允许您根据前一条命令的退出状态(正确退出或伴随错误退出)而执行后一条命令。在这个技巧中,将看到如何把这些基本的技术扩展成更复杂的 shell 编程。

测试

  在任何一种编程语言中,学习了如何给变量分配值和传递参数之后,都需要测试这些值和参数。在 shell 中,测试会设置返回的状态,这与其他命令执行的功能相同。实际上,test 是个内置命令!

test 和 [

  内置命令 test 根据表达式expr 求值的结果返回 0(真)或 1(假)。也可以使用方括号:test  expr 和 [ expr ] 是等价的。 可以用 $? 检查返回值;可以使用 && 和 || 操作返回值;也可以用本技巧后面介绍的各种条件结构测试返回值。


清单 1. 一些简单测试

[ian@pinguino ~]$ test 3 -gt 4 && echo True || echo false
false
[ian@pinguino ~]$ [ "abc" != "def" ];echo $?
0
[ian@pinguino ~]$ test -d "$HOME" ;echo $?
0

在清单 1 的第一个示例中,-gt操作符对两个字符值之间执行算术比较。在第二个示例中,用[ ]的形式比较两个字符串不相等。在最后一个示例中,测试 HOME 变量的值,用单目操作符-d检查它是不是目录。

可以用-eq、 -ne-lt、 -le、 -gt或 -ge比较算术值,它们分别表示等于、不等于、小于、小于等于、大于、大于等于。

可以分别用操作符=!=<>比较字符串是否相等、不相等或者第一个字符串的排序在第二个字符串的前面或后面。单目操作符-z测试 null 字符串,如果字符串非空-n返回 True(或者根本没有操作符)。

说明:shell 也用<>操作符进行重定向,所以必须用\<\>加以转义。清单 2 显示了字符串测试的更多示例。检查它们是否如您预期的一样。


清单 2. 一些字符串测试

[ian@pinguino ~]$ test "abc" = "def" ;echo $?
1
[ian@pinguino ~]$ [ "abc" != "def" ];echo $?
0
[ian@pinguino ~]$ [ "abc" \< "def" ];echo $?
0
[ian@pinguino ~]$ [ "abc" \> "def" ];echo $?
1
[ian@pinguino ~]$ [ "abc" \<"abc" ];echo $?
1
[ian@pinguino ~]$ [ "abc" \> "abc" ];echo $?
1

表 1 显示了一些更常见的文件测试。如果被测试的文件存在,而且有指定的特征,则结果为 True。

表 1. 一些常见的文件测试
操作符特征
-d目录
-e存在(也可以用 -a)
-f普通文件
-h符号连接(也可以用 -L)
-p命名管道
-r可读
-s非空
-S套接字
-w可写
-N从上次读取之后已经做过修改

除了上面的单目测试,还可以使用表 2 所示的双目操作符比较两个文件:

表 2. 测试一对文件
操作符为 True 的情况
-nt测试 file1 是否比 file2 更新。修改日期将用于这次和下次比较。
-ot测试 file1 是否比 file2 旧。
-ef测试 file1 是不是 file2 的硬链接。

其他一些测试可以用来测试文件许可之类的内容。请参阅 bash 手册获得更多细节或使用help test查看内置测试的简要信息。也可以用help命令了解其他内置命令。

-o操作符允许测试利用set -o 选项设置的各种 shell 选项,如果设置了该选项,则返回 True (0),否则返回 False (1),如清单 3 所示。

41/41234>
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • cocayang
    2008-2-26 15:43:42

    写的很好, 希望能够交个朋友.

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号