저는 폴더의 내용을 압축한 다음 해당 파일을 백업 서버로 이동하는 간단한 백업 스크립트를 작성하고 있습니다. 스크립트는 이동하기 전에 tar 파일이 존재하고 0바이트가 아닌지 확인합니다.
문제는 스크립트가 IF 라인 중 하나에서 종료된다는 것입니다.
if [ -f /www/archives/pdf/pdf_201207021048.tar && 11294720 -gt 0 ]; then
echo "tar file exists and is greater than 0 bytes."
else
echo "tar file does not exist or is zero bytes"
fi
콘솔의 오류는 다음과 같습니다.
./backup_pdf.sh: line 49: [: missing `]'
49행은 위의 if 문입니다.
스크립트가 성공적으로 확인되었습니다.
sh -n backup.sh
sh
"]"가 누락되었지만 구문 검사를 통과했습니다. 무슨 일이 일어나고 있나요?
답변1
문제는 &&
유효한 연산자가 아니라는 것 입니다 [
. -a
또는 로 변경 해야 합니다 [ condition ] && [ other_condition ]
.
&&
는분할기(예 ;
: , ||
, &
및 \n
) posix 쉘. 문 [ -f www/archives/pdf/pdf_201207021048.tar
은 하나가 있기 때문에 끝나고 &&
그와 비슷한 또 다른 문(도달하면 오류가 발생함)이 있고 11294720 -gt 0 ]
문은 으로 종료됩니다 ;
.