北京数据恢复 北京 深圳数据恢复 深圳 上海数据恢复 上海 成都数据恢复 成都 重庆数据恢复 重庆 浙江数据恢复 浙江 沈阳数据恢复 沈阳 福建数据恢复 福建 昆明数据恢复 昆明 天津数据恢复 天津
北亚数据恢复中心
网站首页
Index
公司概况
Company
公司动态
Dynamic
服务项目
Service
成功案例
Case
服务报价
Price
技术专区
Technical
联系我们
Contacts
服务网点
Alliance
技术论坛
BBS
 
文 章 导 航
数据恢复技术文章
硬盘维修技术文章
  您现在的位置是:首页>>技术专区>>数据恢复文章>>正文
 
Linux 技巧: Bash 测试和比较函数

作者:  来源: 日期:2007-4-5 15:53:46 点击:

您是否为 Bash shell 中大量的测试和比较选项而困惑呢?这个技巧可以帮助您解密不同类型的文件、算

术和字符串测试,这样您就能够知道什么时候使用 test、 [ ]、 [[ ]]、 (( )) 或 if-then-else 了。
Bash shell 在当今的许多 Linux® 和 UNIX® 系统上都可使用,是 Linux 上常见的默认 shell。Bash 包

含强大的编程功能,其中包括丰富的可测试文件类型和属性的函数,以及在多数编程语言中可以使用的算

术和字符串比较函数。理解不同的测试并认识到 shell 还能把一些操作符解释成 shell 元字符,是成为

高级 shell 用户的重要一步。这篇文章摘自 developerWorks 教程 LPI exam 102 prep: Shells,

s cripting, programming, and compiling,介绍了如何理解和使用 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 旧。

本新闻共4页,当前在第1页  1  2  3  4  

 
上一篇: 用户和Linux之间的接口:shell命令
下一篇: sql server中扩展存储过程
返回首页 | 联系我们 | 关于我们 | 友情连接 | 网站地图 | RSS聚合