조건문, "단항 연산자가 필요합니다"

조건문, "단항 연산자가 필요합니다"

교과서 "유닉스와 시스템 관리 핸드북"에 나와 있는 예제 스크립트에 대해 질문이 있습니다. 스크립트는 다음과 같습니다...라는 오류가 발생합니다 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 ]]

관련 정보