안녕하세요, 저는 bash 스크립팅을 처음 사용합니다. 다음 코드가 있고 오류 없이 실행되거나 종료를 완료합니다. 나는 성공했는지 확인하기 위해 실패 메시지나 끝 부분에 종료를 포함하는 행을 표준 출력에 추가하고 싶습니다. 여러분 중 누구라도 나를 도와줄 것입니다. 추신 감사합니다. 가능하다면 좀 더 일반적인 내용에 도움이 될 수 있습니다.
#!/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
0이 아닌 값으로 종료되는 루프의 각 명령에 대해 변수를 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