如何使用每次不同的变量值循环bash脚本

时间:2016-03-15 08:55:51

标签: bash shell loops while-loop

我是bash脚本新手。我编写了一个包含使用已定义声明变量的命令集的小脚本(例如SAMPLENAME = Alex)。现在,我想要的是每次从文件中使用不同的声明变量值(例如SAMPLENAME = John)循环此脚本。

例如:我设置了以下变量值

#!/bin/bash
tID=000H003HG.TAAGGCGA+GCGATCTA
tSM=Alex
tLB=lib1
O_FOLDER_NAME=HD690_Alex

这是将使用变量的abolve值执行的命令

bwa mem -V -M -R "@RG\tID:${tID}\tSM:${tSM}\tPL:ILLUMINA\tLB:${tLB}"       REFERENCES/$REFERENCE.fa "<zcat    OUTPUT/2_TRIMMED_DATA/$O_FOLDER_NAME/split-adapter-quality-trimmed/${O_FOLDER_NAME}-READ1.fastq.gz" "<zcat OUTPUT/2_TRIMMED_DATA/${O_FOLDER_NAME}/split-adapter-quality-trimmed/${O_FOLDER_NAME}-READ2.fastq.gz" > OUTPUT/3_MAPPED_READS/${O_FOLDER_NAME}/aligned_reads.sam

现在执行上面的命令后,我希望它循环使用以下不同的声明变量值,

#!/bin/bash
tID=000998U3HG.STPUIHY+UIYUSIA
tSM=John
tLB=lib2
O_FOLDER_NAME=HD700_John

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您有一个空格分隔的文件,其中的字段为tIDtSMtLBO_FOLDER_NAME,则只有read个。

while read -r tID tSM tLB O_FOLDER_NAME; do
    bwa mem -V -M \
      -R "@RG\tID:${tID}\tSM:${tSM}\tPL:ILLUMINA\tLB:${tLB}" \
     REFERENCES/"$REFERENCE".fa \
     "<zcat    OUTPUT/2_TRIMMED_DATA/$O_FOLDER_NAME/split-adapter-quality-trimmed/${O_FOLDER_NAME}-READ1.fastq.gz" \
     "<zcat OUTPUT/2_TRIMMED_DATA/${O_FOLDER_NAME}/split-adapter-quality-trimmed/${O_FOLDER_NAME}-READ2.fastq.gz" \
      > OUTPUT/3_MAPPED_READS/"${O_FOLDER_NAME}"/aligned_reads.sam
done <file

如果您的输入文件是CSV格式,则需要使用IFS或其他内容,但这是基本原则。

对于您的两个示例,该文件可能包含以下内容。

000H003HG.TAAGGCGA+GCGATCTA Alex lib1 HD690_Alex
000998U3HG.STPUIHY+UIYUSIA  John lib2 HD700_John

如果该文件在您的脚本之外没有用处,您可能希望改为使用here document

答案 1 :(得分:0)

一种方法是将变量文件更改为 -

#!/bin/bash
echo tID=000H003HG.TAAGGCGA+GCGATCTA
echo tSM=Alex
echo tLB=lib1
echo O_FOLDER_NAME=HD690_Alex

然后运行 ​​-

eval $(./var_file.sh) && your command