Colin's Blog

Recent content on Colin's Blog

马上订阅 Colin's Blog RSS 更新: https://blog.oyyko.com/index.xml

BASH脚本

finalwind42@gmail.com (Oyyko)
2022年5月27日 08:00

BASH 条件判断

test 和 [

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

 1[ian@pinguino ~]$ test 3 -gt 4 && echo True || echo false 2 3false 4 5[ian@pinguino ~]$ [ "abc" != "def" ];echo $? 6 70 8 9[ian@pinguino ~]$ test -d "$HOME" ;echo $?10110

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

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

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

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

一些常见的文件测试 操作符 特征

-d 目录

-e 存在(也可以用 -a)

-f 普通文件

-h 符号连接(也可以用 -L)

-p 命名管道

-r 可读

-s 非空

-S 套接字

-w 可写

-N 从上次读取之后已经做过修改

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

表 2. 测试一对文件 操作符 为 True 的情况

-nt 测试 file1 是否比 file2 更新。修改日期将用于这次和下次比较。

-ot 测试 file1 是否比 file2 旧。

-ef 测试 file1 是不是 file2 的硬链接。

清单 5. 分配和测试算术表达式

 1[ian@pinguino ~]$ let x=2 y=2**3 z=y*3;echo $? $x $y...

剩余内容已隐藏

查看完整文章以阅读更多