多个-a,大于/小于break bash脚本

Cal*_*dge 4 linux bash ubuntu comparison-operators

我写了一个bash脚本,只在工作时间执行卷曲调用.出于某种原因,当我添加"-a"运算符时,每小时比较失败(由于某种原因,我的bash无法识别"&&").

虽然脚本要大得多,但以下是相关内容:

HOUR=`date +%k`

if [ $HOUR > 7 -a $HOUR < 17 ];
then
  //do sync
fi
Run Code Online (Sandbox Code Playgroud)

该脚本给我错误:

./tracksync: (last line): Cannot open (line number): No such file
Run Code Online (Sandbox Code Playgroud)

但是,这种比较不会失败:

if [ $DAY != "SUNDAY" -a $HOUR > 7 ];
then
  //do sync
fi
Run Code Online (Sandbox Code Playgroud)

我的语法错了还是我的bash出了问题?

Cos*_*atu 13

你不能在这样的bash脚本中使用<>.使用-lt-gt为此:

if [ $HOUR -gt 7 -a $HOUR -lt 17 ]
Run Code Online (Sandbox Code Playgroud)

<>使用由所述壳以执行标准输入或标准输出的重定向.

您所说的比较实际上是创建一个7在当前目录中命名的文件.

至于&&,它对shell也有特殊含义,用于创建命令的"AND列表".

所有这些的最佳文档:( man bash以及man test有关比较运算符的详细信息)

  • 实际上,你可以在`[]`中使用`<`和`>`,但你需要转义或引用它们以防止它们被解释为重定向,并且它们进行字母串比较,而不是数字比较.例如,`[7 \> 17]`为真,因为"7"按字母顺序排在("大于")"17"之后. (5认同)

jor*_*anm 6

这里有一些答案,但没有一个推荐实际的数字背景.

以下是如何在bash中执行此操作:

if (( hour > 7 && hour < 17 )); then
   ...
fi
Run Code Online (Sandbox Code Playgroud)

请注意,在数值上下文中扩展变量不需要"$".