Bash if语句语法错误

时间:2011-08-19 16:57:04

标签: bash

我不知道为什么会出现语法错误。有什么想法吗?

#!/bin/bash

if [ `date +%H` -lt 11 ] ; then exit 0;
fi

if [ `date +%H` -gt 14 ] ; then
  if[ `date +%H` -lt 20 ] ; then  # <--- this line is the culprit, it seems
    exit 0;
  fi
fi

跑步时,我得到:

./get.sh: line 7: syntax error near unexpected token `then'
./get.sh: line 7: `  if[ `date +%H` -lt 20 ] ; then '

3 个答案:

答案 0 :(得分:4)

这是语法错误的原因是[不是shell语法的一部分;它实际上是一个命令。最初它只是test命令的符号链接。它仍然是,但它也是bash和其他Bourne派生shell中的内置命令。

if 是一个shell关键字,但是shell会看到if[,而不是if。因为它没有看到if,所以当它看到then时它不知道该怎么做。 (实际上,它确切地知道该怎么做:打印语法错误消息。)

...

一些实验表明它并不像我想象的那么简单。我尝试创建一个名为if[的命令,并将其放在我$PATH的目录中。当我在提示符下键入if[时,shell会要求输入更多内容。我实际上不知道它在寻找什么,但显然[字符是由shell专门处理的。 shell不会将if[拆分为if关键字和[命令(根据其他语言的工作方式,您可能会合理地预期)。 (如果我真的想执行该命令,我可以输入\if["if[" - 或者首先给它一个合理的名称。

无论如何,最后一部分可能并不重要;添加空格字符将解决问题。

答案 1 :(得分:1)

[

之前添加空格
if [ `date +%H` -lt 20 ]

答案 2 :(得分:1)

if[ `date +%H` -lt 20 ] ;

您需要在if

之后放置一个空格
if [ `date +%H` -lt 20 ] ;