こんにちは、私は初めてbashスクリプトを使用します。次のコードがあり、エラーなしで実行または終了を完了します。私は成功したかどうかを確認するために、失敗メッセージまたは最後に終了を含む行を標準出力に追加したいと思います。あなたの誰も私を助けます。 PS ありがとうございます。可能であれば、より一般的な内容に役立ちます。
#!/usr/bin/env bash
fastq-dump --split-files SRR531199
head -n 2000000 SRR531199_1.fastq > SRR531199_1.500k.fastq
head -n 2000000 SRR531199_2.fastq > SRR531199_2.500k.fastq
for dataset in SRR497965 SRR497966 SRR497967 SRR497968 ERR1716491
do
fastq-dump -M 1000 --table SEQUENCE $dataset
done
ウェブサイトの最後にあるアプリのこのチュートリアルで得られたコード:
http://evomics.org/learning/assemble-and-alignment/2018-assemblies-kmer-lab/
答え1
コマンドまたはスクリプトの終了コードを操作する方法はいくつかあります。あなたの場合は複数のコマンドを繰り返すので、次のように各コマンドの終了コードを収集することをお勧めします。
failures=0
fastq-dump --split-files SRR531199
head -n 2000000 SRR531199_1.fastq > SRR531199_1.500k.fastq
head -n 2000000 SRR531199_2.fastq > SRR531199_2.500k.fastq
for dataset in SRR497965 SRR497966 SRR497967 SRR497968 ERR1716491
do
fastq-dump -M 1000 --table SEQUENCE "$dataset" || ((failures++))
done
if ((failures>=1)); then
echo "Script had $failures failures"
exit $failures
else
exit 0
fi
これはfailures
、ゼロ以外の値で終了するループ内の各コマンドに対して変数を1ずつ増やします。次に、計算した失敗回数を再エコーし、その数で終了します。
答え2
それはあなたが望むものに依存します:
fastq-dump
すべてのコマンドとhead
- コマンドを個別に確認するには、&& echo THIS_COMMAND worked || echo THIS_COMMAND failed
この行の末尾に追加してください。 (THIS_COMMAND
テストしたコマンドに置き換えてください)。 forfor
には使用できませんが、do
それほどdone
意味がありません(これはコマンドではなくforループを生成することです)。スクリプト全体が有効であることを確認し、エラーが発生したらすぐに停止するには、次のようにします。
|| exit
各行の末尾に配置されます(再、、、for
およびdo
除くdone
)。- この行を
echo everything worked
スクリプトの最後に入れます
また、可能ですが、あまり簡単ではないのは次の組み合わせです。
#!/usr/bin/env bash
fastq-dump --split-files SRR531199 ; if [ $? -ne 0 ] ; then echo splitting failed ; exit ; fi
head -n 2000000 SRR531199_1.fastq > SRR531199_1.500k.fastq ; if [ $? -ne 0 ] ; then echo first head failed ; exit ; fi
head -n 2000000 SRR531199_2.fastq > SRR531199_2.500k.fastq ; if [ $? -ne 0 ] ; then echo 2nd head failed ; exit ; fi
for dataset in SRR497965 SRR497966 SRR497967 SRR497968 ERR1716491
do
fastq-dump -M 1000 --table SEQUENCE $dataset ; if [ $? -ne 0 ] ; then echo working with $dataset failed ; exit ; fi
done
echo everything worked
失敗が発生するとすぐにスクリプトが停止し、失敗の理由を通知します。すべてが正しく機能している場合は、この内容も言及されます。
警告を受ける:各メソッドは、作業コマンドが戻りコード0で終了し、失敗したコマンドがそうでないという事実に依存します。これはLinuxシステムのほとんどのコマンドに当てはまります(もちろんですが、まったく同じとは言えませんhead
)。fastq-dump