星号:未找到命令

时间:2011-03-10 20:11:08

标签: linux shell

我正在尝试运行以下脚本...

#!/bin/bash -x
ADMIN=..@.com

X='asterisk -rx "show channels" | grep -c Zap/'
if [$X -ge 4]; then
echo "Active Calls: $X" |
mail -s "Active Calls: $X" $ADMIN
fi

并收到此错误“第5行:[星号:未找到命令

我真的很陌生,但理解这可能是一个路径问题。但是,从我运行脚本的同一目录,我可以输入'asterisk -rx“show cha ...'命令,它工作正常。所以不明白为什么shell脚本不能这样做谢谢!

1 个答案:

答案 0 :(得分:2)

你的问题是双重的

  1. 这一行:X='asterisk -rx "show channels" | grep -c Zap/'。您 想要使用命令替换 这是通过$()
  2. 这一行:if [$X -ge 4]; then[实际上不是语法,而是对名为[的二进制文件的调用,它与test二进制文件相同。因此,你必须[之后放置一个空格,否则shell会抱怨你所看到的。
  3. #!/bin/sh -x
    ADMIN="..@.com" # don't forget to quote this
    
    X=$(asterisk -rx "show channels" | grep -c Zap/)
    if [ "$X" -ge 4 ]; then # don't forget the spaces
      echo "Active Calls: $X" |
      mail -s "Active Calls: $X" $ADMIN
    fi
    

    请注意,如果您打算使用bash,也可以使用其更好的语法:

    #!/bin/bash -x
    ADMIN="..@.com" # don't forget to quote this
    
    X=$(asterisk -rx "show channels" | grep -c Zap/)
    if ((X > 4)); then # much nicer syntax
      echo "Active Calls: $X" |
      mail -s "Active Calls: $X" $ADMIN
    fi