产品方案

新闻检索

  • 类型
  • 信息
  • 更多新鲜资讯请
    关注微信公众帐号

在Bash中使用[方括号](二)

我们继续来看方括号的用法,它们甚至还可以在Bash当中作为一个命令使用。

欢迎回到我们的方括号专题。 在当中,我们介绍了方括号在命令行中可以用于通配操作,如果你已经读过前一篇文章,就可以从这里继续了。 方括号还可以以一个命令的形式使用,就像这样:上面这种[...]的形式就可以看成是一个可执行的命令。 要注意,方括号内部的内容a=a和方括号[、]之间是有空格隔开的。 因为这里的方括号被视作一个命令,因此要用空格将命令和它的参数隔开。

上面这个命令的含义是判断字符串a和字符串a是否相同,如果判断结果为真,那么[...]就会以状态码statuscode0退出,否则以状态码1退出。 在中,我们也有介绍过状态码的概念,可以通过$变量获取到最近一个命令的状态码。 分别执行以及这两段命令中,前者会输出0(判断结果为真),后者则会输出1(判断结果为假)。 在Bash当中,如果一个命令的状态码是0,表示这个命令正常执行完成并退出,而且其中没有出现错误,对应布尔值true;如果在命令执行过程中出现错误,就会返回一个非零的状态码,对应布尔值false。 而[...]也同样遵循这样的规则。 因此,[...]很适合在if...then、while或until这种在代码块结束前需要判断是否达到某个条件结构中使用。

对应使用的逻辑判断运算符也相当直观:方括号的这种用法也可以很有shell风格,例如通过带上-f参数可以判断某个文件是否存在:如果你在上一篇文章使用到的测试目录中运行以上这串命令,其中的第3行会判断那几十个文件当中的某个文件是否存在。 如果文件存在,会输出一条提示信息;如果文件不存在,就会把对应的文件创建出来。 最终,这个目录中会完整存在从file000到file099这一百个文件。 上面这段命令还可以写得更加简洁:其中!运算符表示将判断结果取反,因此第3行的含义就是如果文件file$i不存在。

可以尝试一下将测试目录中那几十个文件随意删除几个,然后运行上面的命令,你就可以看到它是如何把被删除的文件重新创建出来的。

除了-f之外,还有很多有用的参数。 -d参数可以判断某个目录是否存在,-h参数可以判断某个文件是不是一个符号链接。 可以用-G参数判断某个文件是否属于某个用户组,用-ot参数判断某个文件的最后更新时间是否早于另一个文件,甚至还可以判断某个文件是否为空文件。

运行下面的几条命令,可以向几个文件中写入一些内容:然后运行:你就会发现所有空文件都被删除了,只剩下少数几个非空的文件。

如果你还想了解更多别的参数,可以执行mantest来查看test命令的man手册(test是[...]的命令别名)。

有时候你还会看到[[...]]这种双方括号的形式,使用起来和单方括号差别不大。

但双方括号支持的比较运算符更加丰富:例如可以使用==来判断某个字符串是否符合某个模式pattern,也可以使用、来判断两个字符串的出现顺序。

可以在中了解到双方括号支持的更多运算符。 【编辑推荐】【责任编辑:TEL:(010)68476606】。

更多查看【产品方案】