在Bash中迭代文件并运行命令

在Bash中迭代文件并运行命令,bash,Bash,我有一堆.sra文件,我想使用SRAtools中的fastq dump将其转换为.fastq格式。它们都存储在同一个目录中,所以我很想运行一个bash脚本来循环遍历它们,并使用各种方法应用fastqdump函数。但是,我不能完全正确地理解语法 #!/bin/bash FILES=/home/sam/Documents/Reads for file in FILES do [ fastq-dump "$file" ] done 这将抛出“预期的一元运算符”。我相信这相当简单,但我是Bash脚本的

我有一堆.sra文件,我想使用SRAtools中的fastq dump将其转换为.fastq格式。它们都存储在同一个目录中,所以我很想运行一个bash脚本来循环遍历它们,并使用各种方法应用fastqdump函数。但是,我不能完全正确地理解语法

#!/bin/bash
FILES=/home/sam/Documents/Reads
for file in FILES
do
[ fastq-dump "$file" ]
done
这将抛出“预期的一元运算符”。我相信这相当简单,但我是Bash脚本的初学者,不太清楚语法是如何工作的


谁能告诉我正确的语法吗?

去掉方括号。并将
文件
更改为
“$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/*

括号
[]
是用于测试的shell语法,其返回值(0表示true,非零表示false)旨在用作逻辑值,通常用于构建
if/then/else
块、循环终止条件或使用
&
|
逻辑运算符的条件执行。当你只想执行一个命令时,不要把它括在括号里。啊,好吧,第一种方法奏效了,我想还是学习如何在bash中使用循环更好。谢谢