我正在bash中编写脚本来轻松循环某些软件,并根据输入内容选择用于特定运行的不同策略。例如,是否要在目录中的所有文件上运行还是仅对子集运行,以及文件是成对的还是独立的。 (请告诉我,我正在处理fastq文件)
通常,我更喜欢在有3个或更多选项的情况下编写大小写控制语句,因为我发现它更易于解释和维护。但是,我希望能够测试某些文件是否存在,类似于bash中的if / else语句何时if [ -e $foo ]; then etc
,这使我想知道案例控制语句是否具有与if / else语句example等效的测试选项。
更具体地说,我想知道是否可以使用case语句测试文件的存在性
答案 0 :(得分:2)
if
没有任何测试选项; test
命令(也拼写为[
)。 if
和case
做两件事。 case
将单个值与多个模式进行比较,以查看匹配的模式。 if
和elif
检查命令的退出状态。碰巧test
/ [
是if
语句中使用最多的命令命令。
每个测试,例如-e
,-d
等,对应于对名为stat
的系统调用的调用,该系统调用返回的信息远远超过任何一个测试实际使用的信息。该信息只是被丢弃。您可以手动手动运行stat
(也称为stat
)周围的外部程序包装器,然后使用case
语句在其输出上进行模式匹配。效率略低,因为它涉及运行外部程序只是为了访问系统调用。但是,bash
发行版确实带有内置的stat
,您可以编译并使其能够减轻该问题。
(bash
5的更改日志在其他命令中提到了stat
的一个新的可加载内建函数,但它与我虽然可用于一会儿。)