开发者问题收集

bash 中 case 控制语句的 if/else 测试等效项

2018-09-10
56

我正在用 bash 编写一个脚本,以便轻松循环某些软件,并根据输入选择用于特定运行的不同策略。例如,是否对目录中的所有文件或仅对子集运行,以及文件是成对的还是独立的。(如果您知道的话,我正在使用 fastq 文件)

通常,只要我有 3 个或更多选项,我更喜欢编写 case 控制语句,因为我发现它更容易解释和维护。但是我希望能够测试某些文件是否存在,类似于 bash 中的 if/else 语句执行 if [ -e $foo ]; then 等 这让我想知道 case 控制语句是否有任何与 if/else 语句等效的测试选项 示例

更具体地说,我想知道是否可以使用 case 语句测试文件的存在

1个回答

if 没有任何测试选项; test 命令(也拼写为 [ )有。 ifcase 执行两件不同的事情。 case 将单个 与多个模式进行比较以查看哪些匹配。 ifelif 检查 命令 的退出状态。碰巧的是, test / [ 是与 if 语句一起使用的最多的命令。

每个测试(如 -e-d 等)都对应于对名为 stat 的系统调用的调用,它返回的信息比任何一个测试实际使用的信息多得多;这些信息被丢弃了。您 可以 自己手动运行一个外部程序包装器来包装 stat (也称为 stat ),然后使用 case 语句对其输出进行模式匹配。这样做效率稍低,因为它需要运行外部程序才能访问系统调用。但是, bash 发行版确实带有一个内置的 stat ,您可以自行编译并启用它来缓解该问题。

bash 5 的更改日志提到了一个新的可加载内置的 stat (以及其他命令),但它似乎与我认为已经可用一段时间的那个没有什么不同。)

chepner
2018-09-10