我对教科书“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 ]]