2016-07-05 84 views
1

bashスクリプトの新機能です。私は、行ごとにテーブルを含むファイルを読みたい。各行で、変数に値を代入したいと思います。whileループエラー:予期しないトークン `done 'の近くで構文エラーが発生しました

#!/bin/bash 

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

私はこのエラーを取得する:これは私のコードのフォーマット、基本的には「whileループエラー:「予期しないトークンの近くに構文エラー `済」私のコードが間違っているものを

任意のアイデア?私は同じエラーに関する他のいくつかの質問を見てみましたが、私は自分のコードを修正することができませんでした。ご協力ありがとうございました!

編集:これはコード全体です。それはそれに他のエラーがあるかもしれません(私は本当に初心者です)が、私はそれが役立つことを願っています。

#!/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 

何かを明確にするかどうかお知らせください。

+0

ポストループの肉。おそらく、いくつかの閉じられていない構造体やアンバランスな括弧などがあります。 –

+1

投稿したコードにエラーはありません。問題を再現し、* exact *コードをコピーしてあなたの質問に貼り付ける最小限の例を作成してください。 (テストケースを絞り込んで問題を解決する可能性があります;その場合は、質問を削除するか、回答を投稿することができます。他人に役立つかどうかによって異なります) –

+0

投稿したコードは、 -is –

答えて

0

$biological_replicate == 1が先頭に近い場合、if [ $technical_replicate == 1 ]; thenelifの後にfiを持ちません。下記参照。

私はあなたがindirect expansion、以下のようなものに興味があると思います。 (たぶん不器用;私は最近自分の間接的な拡張を発見した。)

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チェーンを減らすことができると思います。上記から


編集コード:

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

あなたはそうです、ありがとうございます! – arielle

+0

@arielleお手伝いしますようよろしくお願いいたします。サイトにようこそ - あなたに質問をすることについての詳細は、[ツアー](https://stackoverflow.com/tour)を忘れないでください。 – cxw

+1

ヒントありがとうございます!間接的な展開を見て、自分のコードで試してみます。 – arielle

関連する問題