首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >而循环错误:接近意外令牌的语法错误“已完成”

而循环错误:接近意外令牌的语法错误“已完成”
EN

Stack Overflow用户
提问于 2016-07-05 18:47:29
回答 1查看 726关注 0票数 1

我刚开始使用bash脚本。我想逐行读取包含表格的文件。在每一行中,我希望将值赋值给变量。这基本上是我的代码的格式:

代码语言:javascript
复制
#!/bin/bash

while IFS= read -r line; do
    echo $a $b $c $d
    #if statements…
done < test.txt

我得到了这个错误:“而循环错误:接近意外标记‘完成’的语法错误”

知道我的代码有什么问题吗?我尝试过查看与同一错误相关的其他几个问题,但我无法修复我的代码。谢谢你的帮助!

编辑:这是整个代码。它可能有其他错误(我真的是一个初学者),但我希望它有帮助。

代码语言:javascript
复制
#!/bin/bash

experiment_database="/home/gperron/datasets/ENCODE_tables/final_tables/test_experiment_database.txt"
file_database="/home/gperron/datasets/ENCODE_tables/final_tables/test_file_database.txt"

EXPERIMENT=`cat $experiment_database | head -n $PBS_ARRAYID | tail -n 1 | cut -f1`
echo "EXPERIMENT #$PBS_ARRAYID: $EXPERIMENT"

while IFS= read -r line; do
        echo $file_ID $experiment $target $biological_replicate $technical_replicate $read_number $url $fastq_file $genome
        if [ "$experiment" == "$EXPERIMENT" ]; then
                if [ $biological_replicate == 1 ]; then
                        if [ $technical_replicate == 1 ]; then
                                if [ $read_number == 1 ]; then
                                        ID_111= $file_ID
                                        fastq_111= $fastq_file
                                        url_111= $url
                                        echo "FASTQ file 111 ID: $ID_111"
                                        echo "FASTQ file 111: $fastq_111"
                                        echo "FASTQ file 111 url: $url_111"
                                elif [ $read_number == 2 ]; then
                                        ID_112= $file_ID
                                        fastq_112= $fastq_file
                                        url_112= $url
                                        echo "FASTQ file 112 ID: $ID_112"
                                        echo "FASTQ file 112: $fastq_112"
                                        echo "FASTQ file 112 url: $url_112"
                                fi
                        elif [ $technical_replicate == 2 ]; then
                                if [ $read_number == 1 ]; then
                                        ID_121= $file_ID
                                        fastq_121= $fastq_file
                                        url_121= $url
                                        echo "FASTQ file 121 ID: $ID_121"
                                        echo "FASTQ file 121: $fastq_121"
                                        echo "FASTQ file 121 url: $url_121"
                                elif [ $read_number == 2 ]; then
                                        ID_122= $file_ID
                                        fastq_122= $fastq_file
                                        url_122= $url
                                        echo "FASTQ file 122 ID: $ID_122"
                                        echo "FASTQ file 122: $fastq_122"
                                        echo "FASTQ file 122 url: $url_122"
                                fi
                elif [ $biological_replicate == 2 ]; then
                        if [ $technical_replicate == 1 ]; then
                                if [ $read_number == 1 ]; then
                                        ID_211= $file_ID
                                        fastq_211= $fastq_file
                                        url_211= $url
                                        echo "FASTQ file 211 ID: $ID_211"
                                        echo "FASTQ file 211: $fastq_211"
                                        echo "FASTQ file 211 url: $url_211"
                                elif [ $read_number == 2 ]; then
                                        ID_212= $file_ID
                                        fastq_212= $fastq_file
                                        url_212= $url
                                        echo "FASTQ file 212 ID: $ID_212"
                                        echo "FASTQ file 212: $fastq_212"
                                        echo "FASTQ file 212 url: $url_212"
                                fi
                        elif [ $technical_replicate == 2 ]; then
                                if [ $read_number == 1 ]; then
                                        ID_221= $file_ID
                                        fastq_221= $fastq_file
                                        url_221= $url
                                        echo "FASTQ file 221 ID: $ID_221"
                                        echo "FASTQ file 221: $fastq_221"
                                        echo "FASTQ file 221 url: $url_221"

                                elif [ $read_number == 2 ]; then
                                        ID_222= $file_ID
                                        fastq_222= $fastq_file
                                        url_222= $url
                                        echo "FASTQ file 222 ID: $ID_222"
                                        echo "FASTQ file 222: $fastq_222"
                                        echo "FASTQ file 222 url: $url_222"

                                fi
                        fi
                fi
        fi
done < test_file_database.txt

如果我搞清楚了,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-05 19:10:20

$biological_replicate == 1接近顶部后,if [ $technical_replicate == 1 ]; thenelif之后没有fi。见下文。

我认为您可能对indirect expansion感兴趣,如下所示。(可能有点笨拙;我最近才发现间接扩张。)

代码语言:javascript
复制
this_id="${biological_replicate}${technical_replicate}${read_number}"   # e.g., 111, 112, ...
declare "ID_${this_id}"=$file_id   # evaluates the left side into, e.g., ID_111, and sets $ID_111=$file_id

我认为这可以大大减少您的if链。

以上编辑的代码:

代码语言:javascript
复制
while IFS= read -r line; do
    echo $file_ID $experiment $target $biological_replicate $technical_replicate $read_number $url $fastq_file $genome
    if [ "$experiment" == "$EXPERIMENT" ]; then
            if [ $biological_replicate == 1 ]; then
                    if [ $technical_replicate == 1 ]; then
                            if [ $read_number == 1 ]; then
                                    ID_111= $file_ID
                                    fastq_111= $fastq_file
                                    url_111= $url
                                    echo "FASTQ file 111 ID: $ID_111"
                                    echo "FASTQ file 111: $fastq_111"
                                    echo "FASTQ file 111 url: $url_111"
                            elif [ $read_number == 2 ]; then
                                    ID_112= $file_ID
                                    fastq_112= $fastq_file
                                    url_112= $url
                                    echo "FASTQ file 112 ID: $ID_112"
                                    echo "FASTQ file 112: $fastq_112"
                                    echo "FASTQ file 112 url: $url_112"
                            fi
                    elif [ $technical_replicate == 2 ]; then
                            if [ $read_number == 1 ]; then
                                    ID_121= $file_ID
                                    fastq_121= $fastq_file
                                    url_121= $url
                                    echo "FASTQ file 121 ID: $ID_121"
                                    echo "FASTQ file 121: $fastq_121"
                                    echo "FASTQ file 121 url: $url_121"
                            elif [ $read_number == 2 ]; then
                                    ID_122= $file_ID
                                    fastq_122= $fastq_file
                                    url_122= $url
                                    echo "FASTQ file 122 ID: $ID_122"
                                    echo "FASTQ file 122: $fastq_122"
                                    echo "FASTQ file 122 url: $url_122"
                            fi
                    fi   # <----- this one was missing
            elif [ $biological_replicate == 2 ]; then
            ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38210542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档