Bash if-then-else语句将不能正确循环

Bash if-then-else语句将不能正确循环,bash,loops,if-statement,Bash,Loops,If Statement,我想到了如何让一个if-then-else语句工作,但现在它似乎坏了=(我搞不清楚出了什么问题 /中最多有10个名为barcode01-09的目录和一个名为unclassified的目录。这个脚本应该进入每个目录,为~/Taxonomy.R准备目录(这需要将所有fastq文件压缩并放入名为“data”的子目录中)。然后,它运行~/Taxonomy.R脚本,为每个脚本创建一个元数据文件 Edit使用ls>tmp.txt创建tmp.txt文件,然后echo“0”>>tmp.txt创建一个目录牺牲列表

我想到了如何让一个
if-then-else
语句工作,但现在它似乎坏了=(我搞不清楚出了什么问题

/
中最多有10个名为
barcode01-09
的目录和一个名为unclassified的目录。这个脚本应该进入每个目录,为
~/Taxonomy.R
准备目录(这需要将所有fastq文件压缩并放入名为“data”的子目录中)。然后,它运行
~/Taxonomy.R
脚本,为每个脚本创建一个元数据文件

Edit使用
ls>tmp.txt
创建
tmp.txt
文件,然后
echo“0”>>tmp.txt
创建一个目录牺牲列表,供脚本仔细查看,然后在到达0时停止

#!/bin/bash

source deactivate
source activate R-Env

value=(sed -n 1p tmp.txt)

if [ "$value" = "0" ]
then 
    rm tmp.txt
else
    cd "$(sed -n 1p tmp.txt)"
    gzip *fastq
    #
    for i in *.gz
    do
        mv "$i" "${i%.*}_R1.fastq.gz"; 
    done

    #this adds the direction identifier "R1" to all the fastq.gzips
    mkdir Data
    mv *gz Data
    ~/Taxonomy3.R
    cd Data
    mv * ..
    cd ..
    rm -r Data
    cd ..
    sed '1d' tmp.txt > tmp2.txt
    mv tmp2.txt tmp.txt
fi

目前,它只在第一个条形码目录中创建元数据文件。

如果缩进代码,事情会变得更清楚。 另一方面,以这种方式修改tmp.txt文件既慢又危险。最好只通过读取它来遍历它的内容

#!/bin/bash
source deactivate
source activate R-Env

for value in $(<tmp.txt)
do
    cd "$value"
    gzip *fastq

    for i in *.gz
    do
        # This adds the direction identifier "R1" to all the fastq.gzips
        mv "$i" "${i%.*}_R1.fastq.gz"
    done

    mkdir Data
    mv *gz Data
    ~/Taxonomy3.R
    mv Data/* .
    rmdir Data

    cd -
done
rm tmp.txt
!/bin/bash
源停用
源激活R-Env

价值$(作为一条一般性建议,如果您在每个块中使用固定数量的空格对代码进行缩进,将提高代码的可读性。如果您显示一个示例tmp.txt、包含文件的示例目录结构以及一个示例预期结果,这将有所帮助。我们可以尝试并推断它,但您为我们制作的最简单的示例,答案就越好你会得到更多(更快)。