2017-02-11 3 views
1

Ich habe eine Reihe von. Sra-Dateien, die ich konvertieren möchte. Fastq-Format mit Fastq-Dump von SRAtools. Sie sind alle im selben Verzeichnis gespeichert, also würde ich gerne ein Bash-Skript ausführen, um einfach alle zu durchlaufen und die Fastq-Dump-Funktion mit den verschiedenen Methoden anzuwenden. Allerdings kann ich die Syntax nicht richtig verstehen.Iterieren durch Datei in Bash und Ausführen von Befehl

#!/bin/bash 
FILES=/home/sam/Documents/Reads 
for file in FILES 
do 
[ fastq-dump "$file" ] 
done 

Dies wirft 'Unary Operator erwartet'. Ich bin sicher, es ist ziemlich einfach, aber ich bin ein bisschen Anfänger in Bash-Skripten und nicht ganz sicher, wie die Syntax funktioniert.

Kann mir jemand einen Hinweis auf die richtige Syntax geben?

+1

Die Klammern '[]' sind Shell-Syntax für die Tests, deren Rückgabewert (0 für wahr, von Null für false) soll als logischer Wert verwendet werden, und sie sind wird normalerweise verwendet, um 'if/then/else'-Blöcke, Schleifenbeendigungsbedingungen oder eine bedingte Ausführung mit' && 'und' || 'logischen Operatoren zu erstellen. Wenn Sie einen Befehl nur ausführen möchten, schließen Sie ihn nicht in Klammern ein. – Fred

Antwort

3

Entfernen Sie die eckigen Klammern. Und ändern Sie FILES in "$FILES"/*, damit der Variablenwert erweitert wird und die Dateien in diesem Verzeichnis übereinstimmen.

#!/bin/bash 
FILES=/home/sam/Documents/Reads 
for file in "$FILES"/* 
do 
    fastq-dump "$file" 
done 

Die Schleife ist eigentlich nicht wirklich notwendig. fastq-dump kann mehrere Dateinamen annehmen. Sie könnten einfach schreiben:

fastq-dump /home/sam/Documents/Reads/* 
+0

Ah OK - der erste Weg funktioniert - denke, es wäre besser zu lernen, wie man eine Schleife in bash sowieso verwendet. Vielen Dank! – sahwahn

Verwandte Themen