我试图运行以下脚本…
#!/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脚本不能做到这一点? 谢谢!
你的问题是双重的
X='asterisk -rx "show channels" | grep -c Zap/'
X='asterisk -rx "show channels" | grep -c Zap/'
。 你想通过$()
使用命令替换 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