星号:找不到命令

我试图运行以下脚本…

#!/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行:[星号:命令未find

我真的很新,但理解这可能是一个path问题。 然而,从我运行脚本的同一个目录中,我可以input'asterisk -rx'show cha …'命令,它工作正常。所以不明白为什么shell脚本不能做到这一点? 谢谢!

你的问题是双重的

  1. 这一行: X='asterisk -rx "show channels" | grep -c Zap/' X='asterisk -rx "show channels" | grep -c Zap/' 。 你想通过$()使用命令替换
  2. 这行: if [$X -ge 4]; then if [$X -ge 4]; then[实际上不是语法,而是调用名为[test二进制文件相同的二进制文件]。 因此,你必须在后面加一个空格,否则shell会像你所看到的那样抱怨。

 #!/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