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

时间:2012-01-09 15:57:01

标签: linux bash ubuntu comparison-operators

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

虽然脚本要大得多,但这是相关部分:

HOUR=`date +%k`

if [ $HOUR > 7 -a $HOUR < 17 ];
then
  //do sync
fi

该脚本给出了错误:

./tracksync: (last line): Cannot open (line number): No such file

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

if [ $DAY != "SUNDAY" -a $HOUR > 7 ];
then
  //do sync
fi

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

4 个答案:

答案 0 :(得分:13)

您不能在bash脚本中使用<>。请使用-lt-gt

if [ $HOUR -gt 7 -a $HOUR -lt 17 ]
shell使用

<>来执行stdin或stdout的重定向。

您所说的比较实际上是在当前目录中创建名为7的文件。

对于&&,它对shell也有特殊含义,用于创建命令的“AND列表”。

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

答案 1 :(得分:6)

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

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

if (( hour > 7 && hour < 17 )); then
   ...
fi

请注意,在数值上下文中扩展变量不需要“$”。

答案 2 :(得分:0)

我建议你在变量引用和“标准”运算符周围使用引号:

if [ "$HOUR" -gt 7 -a "$HOUR" -lt 17 ]; ...; fi

答案 3 :(得分:0)

请尝试使用[[,因为它更安全且功能更多。同时使用-gt-lt进行数字比较。

if [[ $HOUR -gt 7 && $HOUR -lt 17 ]]
then
    # do something
fi