在bash脚本中创建步骤

时间:2018-11-29 19:56:57

标签: bash shell

首先,我对shell脚本还比较陌生。我想知道是否有人可以帮助我在bash脚本中创建“步骤”。例如,我想运行一个分析,然后让脚本使用在第一个分析中生成的输出文件进行下一个分析。

因此,例如,下面的脚本将生成输出文件“ filt_C2”:

./sortmerna --ref ./rRNA_databases/silva-arc-23s-id98.fasta,./index/silva-arc-23s-id98.db:./rRNA_databases/silva-bac-23s-id98.fasta,./index/silva-bac-23s-id98.db:./rRNA_databases/silva-euk-18s-id95.fasta,./index/silva-euk-18s-id95.db:./rRNA_databases/silva-euk-28s-id98.fasta,./index/silva-euk-28s-id98.db:./rRNA_databases/rfam-5s-database-id98.fasta,./index/rfam-5s-database-id98.db:./rRNA_databases/rfam-5.8s-database-id98.fasta,./index/rfam-5.8s.db --reads ~/path/to/file/C2.fastq --aligned ~/path/to/file/rrna_C2 --num_alignments 1 --other **~/path/to/file/filt_C2** --fastx --log -a 8 -m 64000

此步骤完成后,我想运行另一个步骤,该步骤将使用生成的输出文件“ filt_C2”。我已经为每个步骤创建了多个bash脚本;但是,如果我可以在一个bash文件中执行每个步骤,则效率会更高。因此,有没有一种方法可以使脚本完成第1步,然后使用第1步生成的文件移至第2步?任何提示将非常感谢。谢谢!

1 个答案:

答案 0 :(得分:2)

欢迎使用bash脚本!

以下是一些提示:

  1. bash脚本文件中可以有多行,只要多行即可。
  2. 您可以从Shell脚本中调用其他bash脚本(或任何其他可执行程序),就像Frank在他的回答中提到的那样。
  3. 例如,如果要将结果命名为“ C3”而不是“ C2”,则可以使用变量使脚本更通用。 (以下未显示)
  4. 如果脚本变得更加复杂,例如,可以使用bash函数。参见https://ryanstutorials.net/bash-scripting-tutorial/bash-functions.php
  5. 我建议将sortmerna放在环境PATH变量中的目录中,并将多个~/path/to/file替换为另一个变量(例如WORKDIR)以保持一致性和灵活性。

例如,假设您将脚本命名为print_analysis.sh

#!/bin/bash

# print_analysis.sh
# Written by Nikki E. Andrzejczyk, November 2018

# Set variables
WORKDIR=~/path/to/file

# Stage 1: Generate filt_C2 using SortMeRNA
./sortmerna --ref ./rRNA_databases/silva-arc-23s-id98.fasta,./index/silva-arc-23s-id98.db:./rRNA_databases/silva-bac-23s-id98.fasta,./index/silva-bac-23s-id98.db:./rRNA_databases/silva-euk-18s-id95.fasta,./index/silva-euk-18s-id95.db:./rRNA_databases/silva-euk-28s-id98.fasta,./index/silva-euk-28s-id98.db:./rRNA_databases/rfam-5s-database-id98.fasta,./index/rfam-5s-database-id98.db:./rRNA_databases/rfam-5.8s-database-id98.fasta,./index/rfam-5.8s.db \
            --reads "$WORKDIR/C2.fastq" \
            --aligned "$WORKDIR/rrna_C2" \
            --num_alignments 1 \
            --other "$WORKDIR/filt_C2" \
            --fastx --log -a 8 -m 64000

# Stage 2: Process filt_C2 to generate result_C2
./stage2 "$WORKDIR/filt_C2" > "$WORKDIR/result_C2.txt"

# Stage 3: Print the result in result_C2
less "$WORKDIR/result_C2.txt"

请注意我如何使用反斜杠\,以便将长sortmerna命令拆分为多个较短的行,并使用#进行可读的注释。

如上所述,仍然有改进的空间,但是在本快速示例中尚未实现,但是希望该快速示例向您展示如何扩展bash脚本并使其一次执行多个步骤。

Bash实际上是一种非常强大的脚本和编程语言。要了解更多信息,您可能想从Bash教程开始,如下所示:

希望这会有所帮助!如果您还有其他问题,或者我误解了您的问题,请随时提问!

干杯

安东尼