我正在尝试运行以下脚本...
#!/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脚本不能这样做谢谢!
答案 0 :(得分:2)
你的问题是双重的
X='asterisk -rx "show
channels" | grep -c Zap/'
。您
想要使用命令替换
这是通过$()
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