Declaração condicional, “operador unário esperado”

3

Estou tendo um problema com um exemplo de script que é fornecido no manual 'Unix and System Administration Handbook'. O script está abaixo ... Estou recebendo um erro que declara 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

Alguma idéia de por que esse erro está aparecendo?

    
por zzz2991 23.03.2015 / 23:50

3 respostas

2

Esse erro é porque LOG_LEVEL não está definido. Você não nos deu nenhuma informação sobre como está executando esta função (nem o shell que está usando ou qual sistema operacional), mas o erro desaparecerá se LOG_LEVEL estiver definido.

Por exemplo:

$ foo=""; [ 1 -le $foo ] && echo yes
bash: [: 1: unary operator expected

Enquanto, se $foo estiver definido:

$ foo="1"; [ 1 -le $foo ] && echo yes
yes
    
por 24.03.2015 / 00:08
0

Como diz o comentário, certifique-se de que sua variável LOG_LEVEL esteja definida e chame seu script com um inteiro como o primeiro argumento (já que o if está prestes a comparar inteiros). Algo como:

export LOG_LEVEL=3
./my_script 2 AnyMessage
    
por 24.03.2015 / 00:10
-3

Você pode tentar isso:

if [[ $message_level -le $LOG_LEVEL ]]
    
por 27.02.2017 / 07:36

Tags