Shell脚本错误

时间:2013-05-15 08:08:33

标签: bash

任何人都可以说出这个脚本有什么问题吗?因为我收到了像

这样的错误
./timer: line 9: [13: command not found
./timer: line 12: [13: command not found

我的脚本看起来像

#!/bin/bash

   while :
     do
    HOUR=$(date +%H)
    MINUTE=$(date +%M)
    SECOND=$(date +%S)

        if [$HOUR == 13] && [$MINUTE == 12] && [$SECOND == 1]
     then ./binary

    elif [$HOUR == 18] && [$MINUTE == 30] && [$SECOND == 1] 
     then ./binary
    fi

    done 

4 个答案:

答案 0 :(得分:2)

在[...]之间留一个空格 例如:

if [$HOUR == 13] && [$MINUTE == 12] && [$SECOND == 1]

应该成为

if [ $HOUR == 13 ] && [ $MINUTE == 12 ] && [ $SECOND == 1 ]

答案 1 :(得分:1)

我认为你必须使用"${VARIABLE}"并尊重方括号的空格

这会给:

if [ "${HOUR}" == 13 ] && [ "${HOUR}" == 12 ] && [ "${HOUR}" == 1 ]

希望有所帮助!

答案 2 :(得分:1)

bash中的测试运算符需要通过开括号和右括号来填充空格,请尝试

[ $HOUR == 13 ] && [ $MINUTE == 12 ] && [ $SECOND == 1 ]

[ $HOUR == 18 ] && [ $MINUTE == 30 ] && [ $SECOND == 1 ]

这是一个您可能会觉得有用的链接 http://tldp.org/LDP/abs/html/testconstructs.html

答案 3 :(得分:1)

有几件事:

  • 您必须在[之后和]之前添加空格。
  • 使用双引号保护变量是一个好习惯。
  • 您必须使用-eq运算符来比较数值(请参阅Bash conditional operators)。

像这样:

if [ "$HOUR" -eq 13] && [ "$MINUTE" -eq 12 ] && [ "$SECOND" -eq 1 ]

elif [ "$HOUR" -eq 18 ] && [ "$MINUTE" -eq 30 ] && [ "$SECOND" -eq 1 ]