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

时间:2018-09-10 16:18:44

标签: bash if-statement switch-statement

我正在bash中编写脚本来轻松循环某些软件,并根据输入内容选择用于特定运行的不同策略。例如,是否要在目录中的所有文件上运行还是仅对子集运行,以及文件是成对的还是独立的。 (请告诉我,我正在处理fastq文件)

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

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

1 个答案:

答案 0 :(得分:2)

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

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

bash 5的更改日志在其他命令中提到了stat的一个新的可加载内建函数,但它与我虽然可用于一会儿。)