整数被解释为变量

时间:2017-01-17 03:42:23

标签: bash variables if-statement syntax integer

我正在使用Raspberry Pi与Raspbian Jessie进行视听艺术装置。通过bash脚本登录后启动音频或视频。这个脚本可以自行运行。

我的问题在于尝试使用if语句安排循环仅在一天中的某些时段运行。这已放在循环的开头,以检查新文件开始之前的时间。

HOUR=$(date +"%H")
echo "The hour is $HOUR"
if [ $HOUR -gt 22 || $HOUR-lt 8 ]
then
        sleep 60
        continue
fi

我已在脚本开头将HOUR声明为declare -i HOUR整数。

脚本输出此错误,然后继续。

./start_audio.sh: line 49: 13: command not found

我相信变量设置正确,因为错误中显示$HOUR [13]。那么为什么$hour在被声明为整数时被解释为命令呢?

尝试添加引号或删除空格等更改,作为其他问题的答案。

3 个答案:

答案 0 :(得分:3)

将变量用双引号括起来(这里不需要,但作为一般的最佳实践),并将支票分成两部分,中间有||(-o基本上已被弃用):

if [ "$HOUR" -gt 22 ] || [ "$HOUR" -lt 8 ]

或者,您可以使用[[ ]]

if [[ "$HOUR" -gt 22 || "$HOUR" -lt 8 ]]

更好的是,使用算术运算符(( ... ))

if ((HOUR > 22 || HOUR < 8))

相关:

答案 1 :(得分:3)

shell内置[test)或外部shell不支持其构造中的短路评估运算符。

您需要使用bash关键字[[

[[ $HOUR -gt 22 || $HOUR -lt 8 ]]

或者将逻辑分为两部分:

[ $HOUR -gt 22 ] || [ $HOUR -lt 8 ]

虽然我们在这里,你应该引用你的变量扩展来防止单词拆分和路径名扩展:

[ "$HOUR" -gt 22 ] || [ "$HOUR" -lt 8 ]

我认为$HOUR-lt 8是一个错字,因为它应该是$HOUR -lt 8

答案 2 :(得分:1)

我认为您不能在标准测试||中使用[ ]运算符。

尝试将||替换为-o,或使用双括号[[ ]]条件(特定于bash)。