2011-03-10 107 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