如果那么else语句将无法正确循环

时间:2018-09-28 09:05:46

标签: bash loops if-statement

我想出了如何使if then else语句起作用的方法,但是现在看来它已经坏了。 =(我无法找出问题所在!

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

编辑 tmp.txt文件是使用ls > 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

当前,它仅在第一个条形码目录中制作元数据文件。

1 个答案:

答案 0 :(得分:1)

如果您缩进代码,事情将会变得更加清晰。 另一方面,用这种方式修改您的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

使用此重新编写的脚本,您只需要创建tmp.txt文件,而无需在末尾添加任何标记(实际上,您根本不需要它,可以检查空文件)。

对于脚本中的每个文件夹,执行所需的操作。我简化了一些文件夹更改,将其最小化为R脚本正确运行所需的文件夹。回过头来,我使用了cd -,该文件转到上一个文件夹,这样您的tmp.txt文件中可以有多个leven。

希望其他一切都清楚。