2016-07-05 7 views
1

Ich bin neu zu bash Scripting. Ich möchte Zeile für Zeile eine Datei mit einer Tabelle lesen. In jeder Zeile möchte ich die Werte Variablen zuweisen. Dies ist im Grunde das Format meines Codes:While-Schleife Fehler: Syntaxfehler in der Nähe von unerwarteten Token "fertig"

#!/bin/bash 

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

ich diese Fehlermeldung: „While-Schleife Fehler: Syntaxfehler in der Nähe von unerwartetem Token` done‘“

Jede Idee, was mit meinem Code falsch? Ich habe versucht, einige andere Fragen zu dem gleichen Fehler zu lesen, aber ich konnte meinen Code nicht reparieren. Danke für Ihre Hilfe!

EDIT: Dies ist der gesamte Code. Es könnte andere Fehler haben (ich bin wirklich ein Anfänger), aber ich hoffe es hilft.

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

Bitte lassen Sie mich wissen, wenn ich etwas klären.

+0

Beitrag das Fleisch der Schleife. Sie haben wahrscheinlich einige nicht geschlossene verschachtelte Konstrukte oder unausgeglichene Parens oder so. –

+1

Ich sehe keine Fehler in dem Code, den Sie gepostet haben. Erstellen Sie ein minimales Beispiel, das das Problem reproduziert, und kopieren Sie den genauen Code in Ihre Frage. (Wahrscheinlich werden Sie das Problem selbst lösen, wenn Sie den Testfall eingrenzen; in diesem Fall können Sie die Frage entweder löschen oder eine Antwort posten, je nachdem, ob sie für andere nützlich wäre.) –

+0

Der von Ihnen gepostete Code funktioniert eindeutig -ist –

Antwort

0

Nach $biological_replicate == 1 der Nähe der Spitze, if [ $technical_replicate == 1 ]; then keine fi nach den elif. Siehe unten.

Ich denke, dass Sie interessiert sein könnten in indirect expansion, etwas wie die unten. (Wahrscheinlich ungeschickt, ich habe erst vor kurzem indirekte Erweiterung mich entdeckt.)

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 

Ich denke, das sich auf den if Ketten ziemlich viel schneiden könnte.


Edited Code von oben:

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

Sie haben recht, vielen Dank! – arielle

+0

@arielle Froh, Ihnen zu helfen! Willkommen auf der Seite - vergessen Sie nicht, die [Tour] (https://Stackoverflow.com/tour) zu besuchen, um mehr über das Stellen von Fragen zu erfahren wird auch qualitativ hochwertige Antworten finden. Siehe auch die Alternative, die ich zu dieser Antwort hinzugefügt habe. – cxw

+1

Vielen Dank für den Tipp! Ich werde in indirekte Erweiterung schauen und es mit meinem Code versuchen. – arielle