2

谁能告诉这个脚本有什么问题?因为我收到了类似的错误

./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

4 回答 4

2

在 [ ... ] 之间放一个空格 示例:

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

应该成为

if [ $HOUR == 13 ] && [ $MINUTE == 12 ] && [ $SECOND == 1 ]
于 2013-05-15T08:10:41.977 回答
1

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

这会给:

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

希望有帮助!

于 2013-05-15T08:10:34.100 回答
1

bash 中的测试运算符需要在左括号和右括号之间留一个空格,试试

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

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

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

于 2013-05-15T08:13:24.627 回答
1

几件事:

  • 您必须在 之后[和之前放置一个空格]
  • 使用双引号保护变量是一种很好的做法。
  • 您必须使用-eq运算符来比较数值(请参阅Bash 条件运算符)。

像这样:

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

elif [ "$HOUR" -eq 18 ] && [ "$MINUTE" -eq 30 ] && [ "$SECOND" -eq 1 ]
于 2013-05-15T08:32:16.683 回答