bash中的另一个If-else-then语句

时间:2017-08-29 12:58:34

标签: bash shell loops if-statement

我正在跑到一个“怪异的”“如果那么”的问题(或者我只是一个新手)。或者,我不完全理解指定语句的语义。

我想要做的是通过下面的表格(csv)阅读

/home/trotos/I16_1505_09.fastq.gz,34,hg19
/home/trotos/I16_1505_06.fastq.gz,34,hg19
/home/trotos/I16_1505_12.fastq.gz,40,hg19
/home/trotos/I15_1277_01.fastq.gz,42,gg5
/home/trotos/I15_1458_01.fastq.gz,42,gg5
/home/trotos/I15_1314_01.fastq.gz,36,gg5
/home/trotos/I15_1458_03.fastq.gz,36,gg5

然后使用每列的输入(按顺序)执行多个命令。 我正在使用的脚本(尚未完善),其中file是statedcsv

#!/bin/bash

shopt -s nullglob


file="$3"
human="$1"
mouse="$2"

while IFS=, read col1 col2 col3 ; do  # the file need to be loaded at the end of the loop, check a done
    echo $col1
    echo $col2
    echo $col3

for i in $col1; do

if [$col3="hg19"]
    then
       ref_genome=$human
echo "1"
echo $ref_genome
    else
        ref_genome=$mouse
echo "2"
echo $ref_genome

fi
echo $ref_genome
echo "....."

done
done < $file

命令如下

./test '/home/trotos/Downloads/chromosomes/hg19.fa' '/home/trotos/Downloads/chromosomes/gg5.fa.gz' 'csv_file'

正确的做法是读取文件的列,并从循环中每行的列中获取所需的数据。

但是当我使用第三列(hg19或gg5)作为TRUE或FALSE语句来获得不同的条件时:

  

如果hg19为TRUE,那么'hg19.fa'是正确的

     

如果gg5为TRUE,那么'gg5.fa.gz'是正确的   但脚本的输出不同:

LOOP
/home/trotos/lane2_I15_1458_08.fastq.gz
42
**gg5**
/home/trotos/lane2_I15_1458_08.fastq.gz
/home/trotos/lane2_I15_1458_08.fastq
/home/trotos/lane2_I15_1458_08

....
1
**/home/trotos/Downloads/chromosomes/hg19.fa**
.....
END LOOP

第一个问题是,当col3 == hg19时,它会给出正确的输出,即“/home/trotos/Downloads/chromosomes_hg19/hg19.fa”。但是当col3 == gg5时,我仍然得到相同的“/home/trotos/Downloads/chromosomes_hg19/hg19.fa”。 那么我能得到正确的答案? 第二个是如何使用“if then else”语句来获取与第3列对应的特定文件,并使用在以下定义的循环中使用该信息:

 for i in $col1; do.

提前谢谢你。 我希望我的描述不会让你感到困惑。

0 个答案:

没有答案