2011-03-10 110 views
2

我试图运行下面的脚本...星号:找不到命令

#!/bin/bash -x 
[email protected] 

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

是在cron作业运行脚本,或者以其他方式为在不同的用户比你安慰? – 2011-03-10 20:14:38

+0

不,我从控制台运行脚本,与运行星号-rx命令时的用户相同。 – Bryan 2011-03-10 20:17:10

回答

2

你的问题是双重的

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

#!/bin/sh -x 
ADMIN="[email protected]" # 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="[email protected]" # 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 
+0

DAMN你好,快!大声笑,这很好。非常感谢你! – Bryan 2011-03-10 20:23:32

+0

@Bryan NP,欢迎来到StackOverflow – SiegeX 2011-03-10 20:56:24