如何在bash脚本中添加getopt选项

时间:2015-02-27 21:38:03

标签: python bash bioinformatics

我编写了一个包含多个Unix命令和Python脚本的bash脚本。目标是建立一条管道,用于检测来自某个输入的长非编码RNA。最后,我想把它变成一个'应用程序'并在一些生物信息学网站上托管它。我面临的一个问题是在bash中使用getopt工具。我找不到一个清楚明白的好教程。此外,还有任何与该代码相关的评论。

#!/bin/bash
if [ "$1" == "-h" ]
then
    echo "Usage: sh $0 cuffcompare_output reference_genome blast_file"
    exit
else
wget https://github.com/TransDecoder/TransDecoder/archive/2.0.1.tar.gz && tar xvf 2.0.1 && rm -r 2.0.1
makeblastdb -in $3 -dbtype nucl -out $3.blast.out
grep '"u"' $1 | \
gffread -w transcripts_u.fa -g $2 - && \
python2.7 get_gene_length_filter.py transcripts_u.fa transcripts_u_filter.fa && \
TransDecoder-2.0.1/TransDecoder.LongOrfs -t transcripts_u_filter.fa
sed 's/ .*//' transcripts_u_filter.fa | grep ">" | sed 's/>//' > transcripts_u_filter.fa.genes
cd transcripts_u_filter.fa.transdecoder_dir
sed 's/|.*//' longest_orfs.cds | grep ">" | sed 's/>//' | uniq > longest_orfs.cds.genes
grep -v -f longest_orfs.cds.genes ../transcripts_u_filter.fa.genes > longest_orfs.cds.genes.not.genes
sed 's/^/>/' longest_orfs.cds.genes.not.genes > temp && mv temp longest_orfs.cds.genes.not.genes
python ../extract_sequences.py longest_orfs.cds.genes.not.genes ../transcripts_u_filter.fa longest_orfs.cds.genes.not.genes.fa
blastn -query longest_orfs.cds.genes.not.genes.fa -db ../$3.blast.out -out longest_orfs.cds.genes.not.genes.fa.blast.out -outfmt 6
python ../filter_sequences.py longest_orfs.cds.genes.not.genes.fa.blast.out longest_orfs.cds.genes.not.genes.fa.blast.out.filtered
grep -v -f longest_orfs.cds.genes.not.genes.fa.blast.out.filtered longest_orfs.cds.genes.not.genes.fa > lincRNA_final.fa
fi

以下是我如何运行它:

sh test.sh cuffcompare_out_annot_no_annot.combined.gtf /mydata/db/Brapa_sequence_v1.2.fa TE_RNA_transcripts.fa

1 个答案:

答案 0 :(得分:1)

如果您希望呼叫为:

test -c cuffcompare_output -r reference_genome -b blast_file

你会有类似的东西:

#!/bin/bash

while getopts ":b:c:hr:" opt; do
  case $opt in
    b)
      blastfile=$OPTARG
      ;;
    c)
      comparefilefile=$OPTARG
      ;;
    h)
      echo "USAGE : test -c cuffcompare_output -r reference_genome -b blast_file"
      ;;
    r)
      referencegenome=$OPTARG
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done

在字符串":b:c:hr:"中, - 第一个":"告诉getopts我们将处理任何错误, - 后续字母是允许的标志。如果该字母后跟':',则getopts将期望该标志采用参数,并将该参数提供为$ OPTARG