#
# 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 ]
문자열이 MAXFILES
0인지 확인하고 있습니다. 그렇지 않기 때문에 $MAXFILES
설정되지 않으므로 이후 테스트는 다음과 같이 어휘적으로 구문 분석됩니다.
if [ $# -gt "" -a "" -ne 0 ]
이것이 정수가 필요하다고 불평하는 이유입니다.
당신이하고 싶은 일은 이것이다 :
if [[ -z "$MAXFILES" ]]; then
MAXFILES=10
fi
차이점은 누락된 달러 기호입니다. 또한 나는 좋은 내장 온전성 검사가 있고 테스트보다 더 일반적이기 때문에 [[ ]]
테스트 [ ]
(사용 시 )를 선호하는 경향이 있습니다 .bash
[
test