2016-12-08 1 views
1

메신저 백그라운드에서 지속적으로 실행되는 BASH 스크립트를 만들려고합니다. 이 bash 스크립트는 rpi-cecd 명령의 결과를 요청하고 45:00을 포함하는 경우 무언가를 수행하고 45:03이 포함 된 경우 다른 작업을 수행합니다. 그러나 지금은 두 가지 이상의 결과를 요구할 경우 스크립트가 작동하지 않습니다.BASH | 명령이 뭔가 같으면, 뭔가 다른 일을한다면

작업 코드,하지만 45:00

/home/rpi-cecd/rpi-cecd | grep -q "45:00" && ok 
내가 노력


코드를 요구하지만, 전혀 작동하지 않았다.

/home/rpi-cecd/rpi-cecd | grep '45' > /dev/null 
if [[ $? =~ .*45:00.* ]] 
then 
    echo "OK Button Clicked - HMS" 
    ok 
elif [ $? == *"45:03"* ] 
then 
    echo "Left Button Clicked - Canteen" 
    left 
else 
    echo "Nothing Clicked?" 
fi 

편집 난 그냥 행운과 함께이 시도.

hhmm=$(/home/rpi-cecd/rpi-cecd) 
case "$hhmm" in 
     45[:]00) 
       ok 
       ;; 
     45[:]03) 
       left 
       ;; 
     *) 
       echo "don't know how to process $hhmm" 
       ;; 
esac 
+0

@Someprogrammerdude는 제안과 (모두 배 대괄호를 사용하는 것이 좋습니다 경우 및 ELIF 적어도 같은 대괄호 전략을 사용할 때). 작동합니까? – Dilettant

+0

하나의 문제는'$?'가 마지막 명령의 종료 코드 * (보통 성공의 경우 0, 실패의 경우 음수가 아님)입니다. 출력 결과를 포함하지 않습니다. 'grep' 명령으로 출력이 필요하면 그것을 캡처해야합니다. –

+0

'$?'는 가장 최근에 실행 된 cmd의 반환 상태입니다. 항상 정수이며, '45 : 00'과 같은 것은 포함하지 않습니다. 여기에 다른 많은 문제가 있습니다. 그러나 첫 번째 cmd를 시도해보고 출력을 var, ile로 저장하십시오. 'hhmm = $ (rpi-cecd ...)'. 이제는 45 [:] 00에서 whit'$ hhmm "을 비교하십시오.) cmd1 ...; 45 [:] 03) cmd2 ... ;; *) echo "$ hhmm을 처리하는 방법을 모른다";; esac'. 행운을 빕니다. – shellter

답변

2

계속 실행 종료하지 않고 rpi-cecd 경우에, 당신은 한 번만 출력을 캡처 할 수 없습니다. 당신은 계속 그것을 읽어야합니다. 출력을 while read 루프로 파이핑하면됩니다.

/home/rpi-cecd/rpi-cecd | while IFS= read -r line; do 
    case $line in 
     *45:00*) 
      ok 
      ;; 
     *45:03*) 
      left 
      ;; 
     *) 
      echo "don't know how to process $line" 
      ;; 
    esac 
done 
+0

아직도 작동하지 않습니다. : /이 말은 꼬리와 비슷하지만 항상 쓰고 있습니다. 터미널에 물건을 넣고 TV 리모콘에서 확인 버튼을 클릭하면 45:00을 포함하는 코드 행을 씁니다. (변경 사항이있는 경우) –

0

당신은 사용하기 전에 답을 청소해야 할 수 있습니다

payload= 
while read line;do 
    [ "$line" ] && [ -z "${line//*payload=*}" ] && payload=${line#*payload=[} 
    done < <(/home/rpi-cecd/rpi-cecd) 

case ${payload%%]*} in 
    *45:00) 
     echo payload 45oo 
     ;; 
    *45:03) 
     echo payload 45.3 
     ;; 
    *) 
     echo "other ("${payload%%]*}")..." 
     ;; 
    esac 
+0

이 명령은 '기타 ...'를 출력 한 다음 종료합니다. rpi-cecd는 꼬리 모양이며 명령이 실행 중일 때 45시 0 분의 행만 씁니다. TV 리모컨. –

+0

좋아, * 페이로드 * 라인을 찾으려면'rpi-cecd'의 전체 출력을 읽어야합니다. –