我很抱歉发布此内容,但这让我发疯。我对 bash 脚本非常陌生,而且真的很挣扎。我有以下格式的文件 8_S58_L001.sorted.bam,我想从许多文件中取出第一个数字(在本例中为 8)并生成一个 csv 文件。这将为我提供下游函数处理样本的顺序。 该脚本如下并且它可以工作,但是每次运行它时我都会收到错误(-bash:意外标记“完成”附近的语法错误)并且很难理解为什么。到目前为止,我已经花了两天时间试图弄清楚它的真相,并在各个论坛上进行了广泛的搜索。
do
test=$(ls -LR | grep .bam$| sed 's/_.*//'| awk '{print}' ORS=',' | sed 's/*$//')
echo $test>../SampleOrder/fileOrder2.csv
done
如果我只是运行
test=$(ls -LR | grep .bam$| sed 's/_.*//'| awk '{print}' ORS=',' | sed 's/*$//')
echo $test>../SampleOrder/fileOrder2.csv
然后我得到了所需的输出并且没有错误,但如果它被合并到 do 语句中,我会得到上述错误。我希望将其合并到更大的脚本中,因此我想首先处理此错误。
我应该说这是在基于 Linux 的集群上运行的。
有经验的人可以告诉我哪里出了问题吗?
提前致谢
山姆
最佳答案
bash 没有 do
语句,并且 done
当它是命令中的第一个单词时是保留字。
所以在
do
something
something
done
do
是语法错误。 do
仅在 for
和 while
循环的上下文中有用,它用于将条件与循环体分开。
由于您报告的是 done
上的语法错误,而不是 do
上的语法错误,我猜测您已经让 Windows 行结尾渗入了您的文件中。 Bash 并不将 \r
(CR) 字符视为特殊字符,因此如果您的文件实际上包含 do\r
,那么它将被视为外部命令的名称。
关于linux - -bash : syntax error near unexpected token `done' in script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28773240/