BASH 프로그램은 파일을 삭제하고 정수 표현이 필요합니다

BASH 프로그램은 파일을 삭제하고 정수 표현이 필요합니다
#
# if MAXFILES is not set, set to 10
#

if [ -z "MAXFILES" ]
then
        MAXFILES=10
fi

#
# now check to see if the number of files being removed is > MAXFILES
# but only if MAXFILES = 0
#

if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]
then
        # if it is, prompt user before removing files
        echo "Remove $# files (y/n)? \c"
        read reply
        if [ "$reply" = y ]
        then
                rm "$@"
        else
                echo "files not removed"
        fi
else
        # number of args <= MAXFILES
        rm "$@"
fi

위 프로그램에서 파일을 삭제해야 합니다. 그러나 실행하려고 하면 다음과 같이 나타납니다.

15행: [: : 정수 표현식이 필요합니다.

답변1

그것이 문제이다:

if [ -z "MAXFILES" ]
then
        MAXFILES=10
fi
# ...
if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]

문자열이 MAXFILES0인지 확인하고 있습니다. 그렇지 않기 때문에 $MAXFILES설정되지 않으므로 이후 테스트는 다음과 같이 어휘적으로 구문 분석됩니다.

if [ $# -gt "" -a "" -ne 0 ]

이것이 정수가 필요하다고 불평하는 이유입니다.

당신이하고 싶은 일은 이것이다 :

if [[ -z "$MAXFILES" ]]; then
  MAXFILES=10
fi

차이점은 누락된 달러 기호입니다. 또한 나는 좋은 내장 온전성 검사가 있고 테스트보다 더 일반적이기 때문에 [[ ]]테스트 [ ](사용 시 )를 선호하는 경향이 있습니다 .bash[test

관련 정보