2017-02-11 81 views
1

我有一堆.sra文件,我想使用来自SRAtools的fastq-dump转换成.fastq格式。它们都存储在同一个目录中,所以我很想运行一个bash脚本来循环遍历它们,并使用各种方法应用fastq-dump函数。但是,我无法完全理解语法。在Bash中运行文件并运行命令

#!/bin/bash 
FILES=/home/sam/Documents/Reads 
for file in FILES 
do 
[ fastq-dump "$file" ] 
done 

这引发'预期的一元运算符'。我敢肯定它非常简单,但我在Bash脚本编写方面有点初学者,并且不太清楚语法是如何工作的。

任何人都可以给我一个关于正确语法的提示吗?

+1

括号'[]'是测试的shell语法,它们的返回值(0表示真,非0表示假)用作逻辑值,它们是通常用于构建'if/then/else'块,循环终止条件或使用'&&'和'||'逻辑运算符进行条件执行。当你只是想执行一个命令时,你不会将它括在括号中。 – Fred

回答

3

摆脱方括号。并将FILES更改为"$FILES"/*,以便扩展变量值并匹配该目录中的文件。

#!/bin/bash 
FILES=/home/sam/Documents/Reads 
for file in "$FILES"/* 
do 
    fastq-dump "$file" 
done 

实际上,循环并不是真的有必要。 fastq-dump可以带多个文件名。你可以简单地写:

fastq-dump /home/sam/Documents/Reads/* 
+0

好的 - 第一种方法奏效 - 认为最好学习如何在bash中使用循环。谢谢! – sahwahn