嗨,我是 bash 脚本的新手,我有下面的代码,它运行时没有任何错误或完成退出。我想在标准输出中添加一行失败或退出的消息,以确保它成功与否。你们中的任何一个都会帮助我。谢谢 PS-如果可能的话,帮助获得更通用的。
#!/usr/bin/env bash
fastq-dump --split-files SRR531199
head -n 2000000 SRR531199_1.fastq > SRR531199_1.500k.fastq
head -n 2000000 SRR531199_2.fastq > SRR531199_2.500k.fastq
for dataset in SRR497965 SRR497966 SRR497967 SRR497968 ERR1716491
do
fastq-dump -M 1000 --table SEQUENCE $dataset
done
我在网站末尾的应用程序中从本教程中获得的代码:http:
//evomics.org/learning/assembly-and-alignment/2018-assembly-kmer-lab/
有几种方法可以对命令或脚本的退出代码采取行动。在您的情况下,由于您正在循环多个命令,因此最好收集每个命令的退出代码,类似于以下内容:
failures
这将为循环中退出非零的每个命令的变量添加 1 。然后它将回显它计数的失败次数并以该数字退出。这取决于你想要什么:
如果您想分别检查所有
fastq-dump
和- 命令:在这些行的末尾head
添加。&& echo THIS_COMMAND worked || echo THIS_COMMAND failed
(替换THIS_COMMAND
为您测试的命令)。您不能将其用于for
,但这do
并done
没有多大意义(这些不是命令,而是生成 for 循环的东西)。如果您想检查整个脚本是否有效,并且一旦出现故障就立即停止运行,那么我会这样做:
|| exit
每一行的末尾(同样,除了for
,do
和done
)echo everything worked
放在脚本的末尾也可能,但不那么琐碎,是一种组合:
这会在出现故障时立即停止脚本并告诉您发生了什么故障。如果一切正常,它也会提到这一点。
警告:每种方法都依赖于这样一个事实,即工作命令以返回码 0 退出,而失败的命令则不退出。Linux 系统上的大多数命令都是这种情况(当然对于
head
,但我不能肯定地说同样的话fastq-dump
)