폴더의 내용을 tar로 작성한 다음 해당 파일을 백업 서버로 이동하는 간단한 백업 스크립트를 작성하겠습니다. 스크립트는 이동하기 전에 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 ]
해당 명령문은 로 종료됩니다 ;
.