条件语句,“预期一元运算符”

条件语句,“预期一元运算符”

我对教科书“Unix 和系统管理手册”中给出的示例脚本有疑问。脚本如下...我收到一条错误,指出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未定义。您没有向我们提供任何有关如何运行此函数的信息(也没有向我们提供您正在使用的 shell 或操作系统),但如果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 ]]

相关内容