bash 中 case 控制语句的 if/else 测试等效项
我正在用 bash 编写一个脚本,以便轻松循环某些软件,并根据输入选择用于特定运行的不同策略。例如,是否对目录中的所有文件或仅对子集运行,以及文件是成对的还是独立的。(如果您知道的话,我正在使用 fastq 文件)
通常,只要我有 3 个或更多选项,我更喜欢编写 case 控制语句,因为我发现它更容易解释和维护。但是我希望能够测试某些文件是否存在,类似于 bash 中的 if/else 语句执行
if [ -e $foo ]; then 等
这让我想知道 case 控制语句是否有任何与 if/else 语句等效的测试选项
示例
更具体地说,我想知道是否可以使用 case 语句测试文件的存在
if
没有任何测试选项;
test
命令(也拼写为
[
)有。
if
和
case
执行两件不同的事情。
case
将单个
值
与多个模式进行比较以查看哪些匹配。
if
和
elif
检查
命令
的退出状态。碰巧的是,
test
/
[
是与
if
语句一起使用的最多的命令。
每个测试(如
-e
、
-d
等)都对应于对名为
stat
的系统调用的调用,它返回的信息比任何一个测试实际使用的信息多得多;这些信息被丢弃了。您
可以
自己手动运行一个外部程序包装器来包装
stat
(也称为
stat
),然后使用
case
语句对其输出进行模式匹配。这样做效率稍低,因为它需要运行外部程序才能访问系统调用。但是,
bash
发行版确实带有一个内置的
stat
,您可以自行编译并启用它来缓解该问题。
(
bash
5 的更改日志提到了一个新的可加载内置的
stat
(以及其他命令),但它似乎与我认为已经可用一段时间的那个没有什么不同。)