이 스크립트를 사용하려고 합니다.
#!/bin/csh
foreach SUB (1 2 3 4 5 6 7 8 9 10 11 12 13 14)
echo $SUB
foreach VISIT (1 2 3 4 5 6 7 8)
echo $VISIT
grep 'StudyDate' -f /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VIS}/scout/001/infodump.dat
done
done
하지만 다음과 같은 오류 메시지가 나타날 때마다:
1
1
SUB: Undefined variable.
이유는 모르겠습니다.
답변1
와는 별개로스크립트를 작성하면 안되는 모든 이유csh
, 스크립트에서 bash 구문과 csh 구문을 혼합하고 있습니다.
로 루프를 시작 csh
foreach
하고 로 루프를 끝내려고 합니다 bash
done
. a의 루프 종료는 csh
foreach
is end
, is not 입니다 done
. 또한 grep 문에서 VISIT
호출되는 변수가 있습니다.$VIS
따라서 스크립트는 csh에서 구문적으로 정확합니다.
#!/bin/csh
foreach SUB (1 2 3 4 5 6 7 8 9 10 11 12 13 14)
echo $SUB
foreach VISIT (1 2 3 4 5 6 7 8)
echo $VISIT
grep 'StudyDate' -f /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VISIT}/scout/001/infodump.dat
end
end
또는 bash에서:
#!/bin/bash
for SUB in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
echo $SUB
for VISIT in 1 2 3 4 5 6 7 8; do
echo $VISIT
grep 'StudyDate' -f /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VISIT}/scout/001/infodump.dat
done
done
2017/04/03 수정
다음은 파일에 대한 테스트를 추가하는 bash 스크립트 버전입니다.
#!/bin/bash
idf_pfx="/home/colourlab/Desktop/DrummingDTI"
idf_sfx="scout/001/infodump.dat"
for SUB in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
echo $SUB
for VISIT in 1 2 3 4 5 6 7 8; do
echo $VISIT
idfile="${idf_pfx}/D${SUB}/D${SUB}V${VISIT}/${idf_sfx}"
if [ -f "${idfile}" ]; then
grep 'StudyDate' $idfile
else
echo "No studydate file: $idfile"
fi
done
done
답변2
오류 메시지가 표시된 코드와 일치하지 않습니다. $SUB는 잘 정의된 변수이며 csh는 이를 복사하지 않습니다. 대신 csh는 "Complete: command notfound" 오류를 발생시킵니다. 복사하여 붙여넣은 메시지가 맞습니까?