2013-05-09 3 views
1

내가 알고 (명령) 다음과 같은 조건에서 다음 명령을 반환 0 (true) 또는 1 (거짓) 내용 : 디스크, 그렇지 않은 경우는 false 활성화배쉬 : (명령)하는 경우 |

hdparm -C /dev/sda |grep "active/idle" 

경우는 true . 프로그래밍 방식으로이 결과를 사용하여 다른 텍스트를 표시하거나 모니터링에 사용하고 싶습니다. 나는 이것으로 시도했지만 구문 (구문 오류) :

if [ hdparm -C /dev/sda |grep "active/idle" ]; then 
    echo sda1 is ON 
else 
    echo sda1 is OFF 
fi 

어떻게 제대로 작동합니까?

또한 가능한 모든 상황에 대한 모든 종류의 표현 문을 설명 할 수있는 Bash 조건부 표현에 대한 명확하고 이해하기 쉬운 가이드가 있습니까?

+0

http://www.robvanderwoude.com/이 매우 위험이 페이지 – Arun

답변

1

랩 서브 쉘 내부의 조건문 :

if [ -z "$(hdparm -C /dev/sda |grep "active/idle")" ]; then 

-z 여기에 빈 문자열을 테스트합니다. 아마도 active/idleactive으로 대체해야합니다.

편집 : 당신은 조건에 대한 모든 세부 사항을 찾을 수

hdparm -C /dev/sda | grep -q "active/idle" 
status=$? 
if [ $status -eq 0]; then 

: @abasu에서 알 수 있듯이,이 경우 표현식이 일치하는 경우 0이되는, GREP의 리턴 코드를 테스트하는 것이 좋습니다 statement on test man page. 그러나 쉘은 bash처럼 구문을 더 확장 할 수 있습니다.

+1

를 시도하십시오. stderr 또는 stdout에서 무언가를 포함 할 수있는 문자열을 확인하는 이유는 무엇입니까? 'grep -q'를 사용하면 어떨까요? 마지막 명령의 결과를 얻으려면 항상'$? '를 사용하십시오. – abasu

+0

당신은 확실히 옳습니다. 편집 됨. –

3

나는 보통 단지

if hdparm -C /dev/sda | grep -q 'active/idle' ; then 
    echo sda1 is ON 
else 
    echo sda1 id OFF 
fi 
+0

@LonelyPixel,'['및'[[''는 특수한 if 구문이 아닌 단지 명령이고, 그 명령의 종료 상태에''if''가 작용할 때이 대답이 더욱 분명해질 것입니다. –