교과서 "유닉스와 시스템 관리 핸드북"에 나와 있는 예제 스크립트에 대해 질문이 있습니다. 스크립트는 다음과 같습니다...라는 오류가 발생합니다 logscript: line 8: [: 1: unary operator expected
.
# The log level is set in the global variable LOG_LEVEL. The choices
# are, from most to least severe. Error, Warning, Info, and Debug.
function logMsg {
message_level=$1
message_itself=$2
if [ $message_level -le $LOG_LEVEL ]; then
case $message_level in
0) message_level_text="Error";;
1) message_level_text="Warning";;
2) message_level_text="Info";;
3)message_level_text="Debug";;
*) message_level_text="Other"
esac
echo "${message_level_text}: $message_itself"
fi
}
# Main program starts here
logMsg $1 $2
이 오류가 발생하는 이유에 대한 아이디어가 있습니까?
답변1
오류는 LOG_LEVEL
정의되지 않았기 때문에 발생합니다. 이 기능을 실행하는 방법(또는 사용 중인 셸이나 운영 체제)에 대한 정보를 제공하지 않았지만 LOG_LEVEL
이 오류가 설정되면 오류가 사라집니다.
예를 들어:
$ foo=""; [ 1 -le $foo ] && echo yes
bash: [: 1: unary operator expected
동시에 다음을 $foo
설정하면:
$ foo="1"; [ 1 -le $foo ] && echo yes
yes
답변2
설명에서 알 수 있듯이 LOG_LEVEL
변수를 설정하고 정수를 첫 번째 인수로 사용하여 스크립트를 호출해야 합니다( if
정수가 곧 비교될 예정이므로). 그것은 다음과 같습니다:
export LOG_LEVEL=3
./my_script 2 AnyMessage
답변3
다음을 시도해 볼 수 있습니다.
if [[ $message_level -le $LOG_LEVEL ]]