디렉토리가 존재하면 문제가 발생합니다

디렉토리가 존재하면 문제가 발생합니다

다음 코드가 있습니다.

#!/bin/bash

while read line
do
echo "line" $line
if [[ -d ../Results/${line}_Forward && -d ../Results/${line}_Reverse ]]
then

        cd ../Results/COMBI
        mkdir ./${line}_COMBI
        cd ..
        for (( win = 2; win < 20; win += 2 )); do
        printf 'The value of win is %d, now entereing inner loop\n' "$win"

        for (( per = 50; per < 100; per += 2 )); do
            printf 'Value of per is %d\n' "$per"
            merger -asequence ./${line}_Forward/${line}_Forward_Trimmed_w${win}_p${per}.fa -bsequence ./${line}_Reverse/REV_COMP/${line}_Reverse_Trimmed_w${win}_p${per}_RevComp.fa -outseq ./COMBI/${line}_COMBI/${line}_w${win}_p${per}_COMBI.fa
        done
        done
else
    echo $line "Forward or Reverse directory does not exist"
fi
done < ./Data_ORD.txt

스크립트를 실행하면 if 문에 포함된 모든 사전이 종료되지만 실제로는 종료됩니다. Data_ORD.txt의 각 줄에 대해 다음과 같은 출력이 표시됩니다.

line  ORD0926
 Forward or Reverse directory does not exist

마지막 echo$line 변수는 인쇄되지 않습니다. 변수나 if 문에 문제가 있는 것 같습니다.

마지막 에코에서 $line이 인쇄되지 않고 if 문이 디렉토리를 인식하지 못하는 이유를 아시나요?

**.fa: DNA 서열을 포함하는 일반 텍스트 형식인 fasta 형식입니다. **병합 명령: EMBOSS 패키지 "European Molecular Biology Open Software Suite"에 포함됨

답변1

두 개의 디렉토리가 있는지 확인 중입니다. 그런 다음 데이터 파일에 포함된 코드를 잘라내는 새 변수를 만들었습니다. wth=echo ${line} cut -c 1-7

#!/bin/bash

while read line
do
echo "line" $line
wth=`echo ${line} |  cut -c 1-7`
echo "wth" ${wth}
if [[ -d ../Results/${wth}_Forward && -d ../Results/${wth}_Reverse ]]
then

        cd ../Results/COMBI
        mkdir ./${wth}_COMBI
        cd ..
        for (( win = 2; win < 20; win += 2 )); do
        printf 'The value of win is %d, now entereing inner loop\n' "$win"

        for (( per = 50; per < 100; per += 2 )); do
            printf 'Value of per is %d\n' "$per"
            merger -asequence ./${wth}_Forward/${wth}_Forward_Trimmed_w${win}_p${per}.fa -bsequence ./${wth}_Reverse/REV_COMP/${wth}_Reverse_w${win}_p${per}_RevComp.fa -outfile none -outseq ./COMBI/${wth}_COMBI/${wth}_w${win}_p${per}_COMBI.fa
        done
        done
else
    echo ${wth} "Forward or Reverse directory does not exist"
fi
done < ./Data_ORD.txt

이제 스크립트를 실행할 수 있습니다. $line을 변수로 직접 호출하는 것은 보이지 않는 공백이 있을 수 있으므로 좋은 생각이 아닌 것 같습니다.

관련 정보