我正在使用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
在被声明为整数时被解释为命令呢?
尝试添加引号或删除空格等更改,作为其他问题的答案。
答案 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)。