Shell &引用;应为整数表达式“;错误

Shell &引用;应为整数表达式“;错误,shell,unix,scripting,Shell,Unix,Scripting,我想写一个问候语脚本。到目前为止,我所拥有的: if [ "$HOUR" -lt 12 ]; then echo " Good Morning Mohamed" elif [ "$HOUR" -ge 12 ] && [ "$HOUR" -lt 16 ]; then echo " Good Afternoon Jama." elif [ "$HOUR" -ge 16 ]; then echo " Good Evening Jama." fi 这给了我一

我想写一个问候语脚本。到目前为止,我所拥有的:

if [ "$HOUR" -lt 12 ]; then
    echo " Good Morning Mohamed"
elif [ "$HOUR" -ge 12 ] && [ "$HOUR" -lt 16 ]; then
    echo " Good Afternoon Jama."
elif [ "$HOUR" -ge 16 ]; then
    echo " Good Evening Jama."  
fi
这给了我一个错误

需要整数表达式


如何解决此问题?

如评论所示,如果您只需给小时一个值(至少在我的CentOS 6系统上),它就可以工作:


如评论所示,如果您只给小时一个值(至少在我的CentOS 6系统上),它就可以工作:


HOUR
是空字符串。查看重复项。那么我该怎么做,我必须声明一个字符串变量。您必须为
HOUR
分配一些数值。它要么是空的,要么是字符串,但是如果没有脚本的其余部分,就无法判断。如果这是您的完整脚本,那么它显然是空字符串。如果您不想设置
HOUR
并且希望代码仍然工作,那么可以使用
If((HOUR>12));然后…
construct。查看此帖子了解更多详细信息:括号不起作用。
HOUR
是空字符串。查看重复项。那么我该怎么做,我必须声明一个字符串变量。您必须为
HOUR
分配一些数值。它要么是空的,要么是字符串,但是如果没有脚本的其余部分,就无法判断。如果这是您的完整脚本,那么它显然是空字符串。如果您不想设置
HOUR
并且希望代码仍然工作,那么可以使用
If((HOUR>12));然后…
construct。看这篇文章了解更多细节:括号不起作用。
HOUR=`date +%k`
if [ "$HOUR" -lt 12 ]; then
    echo " Good Morning Mohamed"
elif [ "$HOUR" -ge 12 ] && [ "$HOUR" -lt 16 ]; then
    echo " Good Afternoon Jama."
elif [ "$HOUR" -ge 16 ]; then
    echo " Good Evening Jama."  
fi