如果/否则测试Bash中案例控制语句的等效项



我正在用bash编写一个脚本来轻松循环一些软件,并根据输入选择用于特定运行的不同策略。例如,是在一个目录中的所有文件上运行还是只对一个子集运行,以及文件是成对的还是独立的。(如果你告诉,我正在使用fastq文件(

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

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

if

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

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

(bash5 的更改日志提到了一个新的可加载内置stat命令——以及其他命令——但它似乎与我已经可用一段时间的那个没有任何不同。

最新更新