Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 被解释为变量的整数_Bash_Variables_If Statement_Syntax_Integer - Fatal编程技术网

Bash 被解释为变量的整数

Bash 被解释为变量的整数,bash,variables,if-statement,syntax,integer,Bash,Variables,If Statement,Syntax,Integer,我正在制作一个视听艺术装置,与Raspbian Jessie一起使用Raspberry Pi。音频或视频在通过bash脚本登录后启动。此脚本本身运行良好 我的问题是试图使用if语句将循环安排为仅在一天中的特定时间运行。它被放置在循环的开头,以检查新文件开始之前的时间 HOUR=$(date +"%H") echo "The hour is $HOUR" if [ $HOUR -gt 22 || $HOUR-lt 8 ] then sleep 60 continue

我正在制作一个视听艺术装置,与Raspbian Jessie一起使用Raspberry Pi。音频或视频在通过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
被声明为整数时会被解释为命令呢


根据对其他问题的回答,尝试了添加引号或删除空格等更改。

将变量用双引号括起来(此处不要求,但作为一般最佳做法),并将检查结果一分为二,中间加一个
|
(-o通常不推荐):

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

if [[ "$HOUR" -gt 22 || "$HOUR" -lt 8 ]]
更好的是,使用算术运算符,
(…)

if((小时>22 | |小时<8))

相关的:


将变量用双引号括起来(此处不需要,但作为一般最佳做法),并将检查结果一分为二,中间加一个
|
(-o通常不推荐):

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

if [[ "$HOUR" -gt 22 || "$HOUR" -lt 8 ]]
更好的是,使用算术运算符,
(…)

if((小时>22 | |小时<8))

相关的:


外壳内置的
[
测试
)或外部外壳不支持其结构内的短路评估操作员

您需要使用
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

外壳内置
[
测试
)或外部外壳不支持其结构内的短路评估操作符

您需要使用
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

我认为您不能在标准测试中使用
|
操作符


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

我认为在标准测试
[]
中不能使用
|
操作符



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

你能发布整个脚本吗?会自动检测到许多类似的问题。你能发布整个脚本吗?会自动检测到许多类似的问题。引用不会有什么坏处,但我认为它不会增加任何内容:如果小时变量包含空格(需要引用)如果-GT和-LT运算符也会出现不好的结果,如果不能相信日期命令只返回数字,那么在尝试比较之前必须检查它。@弗莱德考虑<代码>小时= FoO o 3 < /Cl>。如果不引用代码> $小时<代码>,则<代码>[成功,尽管
$HOUR
根本不是整数,更不用说小于8或大于22。正确。我总是使用双括号[[]],它们没有遇到这个问题,我忘记了单括号测试命令执行的分词。引号不会有什么坏处,但我认为它不会增加任何内容:如果HOUR变量包含空格(需要引号)如果-GT和-LT运算符也会出现不好的结果,如果不能相信日期命令只返回数字,那么在尝试比较之前必须检查它。@弗莱德考虑<代码>小时= FoO o 3 < /Cl>。如果不引用代码> $小时<代码>,则<代码>[成功,尽管
$HOUR
根本不是整数,更不用说小于8或大于22。正确。我总是使用双括号[[]],它们没有遇到这个问题,我忘记了单括号测试命令执行的分词操作。
-o
很久以前就被弃用了。我真的不是专家,但是-o似乎是POSIX“测试”规范的一部分命令…如果bash不赞成将该操作符用于其内部内置版本,我会感到惊讶(请参阅)
-o
是POSIX规范的一个扩展,被认为是过时的。新代码不应该使用它。这只是常识,还是有一些参考源记录了这些指南?它们实际上在中被标记为“过时”(单击链接).
-o
早就被弃用了。我真的不是专家,但是-o似乎是POSIX规范中“test”命令的一部分……如果bash在其内部内置版本中弃用了该操作符,我会感到惊讶(请参阅)
-o
是POSIX规范的一个扩展,被认为是过时的。新代码不应该使用它。这只是常识,还是有一些参考源记录了这些指南?它们实际上在中被标记为“过时”(单击链接).
-o
基本上已弃用;请改用两个命令
[…]|[…]
-o
基本上已弃用;请使用两个命令
[…]|[…]。。。