2011-03-10 6 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 호선 : [별표 : 명령을 찾을 수 없습니다"

나 '를 정말로 이것에 새로운 것이지만 그것은 아마도 경로 문제라고 이해합니다. 그러나 동일한 디렉토리에서 스크립트를 실행하고 있는데 '별표 -rx "show cha ...'명령을 입력하면 제대로 작동하므로 쉘 스크립트가 동일한 작업을 수행 할 수없는 이유를 이해하지 못합니다. ?! 감사합니다

+0

는 cron 작업에서 실행되는 스크립트를하거나, 그렇지 않으면 당신이 아닌 다른 사용자로 콘솔? –

+0

아니요, 별표 -rx 명령을 실행할 때와 같은 사용자 콘솔에서 스크립트를 실행하고 있습니다. – Bryan

답변

2

귀하의 문제가 두 배

  1. 이 줄 : X='asterisk -rx "show channels" | grep -c Zap/' 당신은 $()
  2. 이 라인을 통해 이에 대한 명령 치환을 사용하려면 이 :.. if [$X -ge 4]; then[ 실제로하지 구문 [이라는 이진 (binary) 호출은과 동일합니다.210 바이너리. 그러므로 당신은 뒤에 공백을 넣어야합니다. 그렇지 않으면 쉘이 당신이 보았 듯이 불평 할 것입니다.

. 당신이 bash을 사용하려는 경우, 당신은뿐만 아니라 그것의 더 좋은 구문을 사용할 수있는

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

참고 :

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

당신은 멋지고 빠릅니다! 롤, 그 위대한 일했다. 아주 많이 고마워! – Bryan

+0

@Bryan NP, StackOverflow에 오신 것을 환영합니다. – SiegeX

관련 문제