2017-02-16 2 views
1

Linux에서는와 같은 간단한 명령 줄 조건을 수행 할 수 있습니다.두 가지 Linux 조건을 결합 할 수 있습니까?

echo 'The short brown fox' | grep -q 'fox' && echo 'Found' || echo 'Not Found' 

>> Found 

또는

test -e test.txt && echo 'File Exists' || echo 'File Not Found' 
>> File exists 

그것은 하나에 두 가지 조건을 결합 할 수 있습니까? 따라서 여우가 발견되면, 파일이 존재하는지 확인하고 그에 따라 조건을 실행합니다.

나는 다음을 시도하고 작동 표시되지 않습니다

echo 'The short brown fox' | grep -q 'fox' && (test -e test.txt && echo 'File Exists' || echo 'File Not Found') || echo 'Fox Not Found' 

echo 'The short brown fox' | grep -q 'fox' && `test -e test.txt && echo 'File Exists' || echo 'File Not Found'` || echo 'Fox Not Found' 

내가 한 줄에 자리를 차지할 명령이 필요합니다.

답변

2

이 같은 쉘에서 그룹 여러 명령에 { ...; }을 사용할 수 있습니다 : 명령의

echo 'The short brown fox' | grep -q 'fox' && 
{ [[ -e test.txt ]] && echo "file exists" || echo 'File Not Found'; } || echo 'Not Found' 

모두 즉 { ...; }이 실행됩니다 중괄호 안에 grep이 성공하고 || 외부 { ...; }grep 실패에 대해 평가됩니다.


편집 : 여기

csh 하나 라이너하고 동일합니다

echo 'The short brown ox' | grep -q 'fox' && ([ -e "test.txt" ] && echo "file exists" || echo 'File Not Found' ;) || echo 'Not Found' 
+0

이것은 단지 오류로 보입니다 : {: 명령을 찾을 수 없습니다. 파일을 찾을 수 없음 } : 명령을 찾을 수 없습니다. 을 찾을 수 없음 – difurious

+0

어떤 셸을 사용하고 있습니까?이것은'bash'에서 나를 위해 잘 작동했습니다. – anubhava

+0

-csh를 사용했습니다 – difurious

0

예! 당신은뿐만 아니라 그렇게 만 볼 "발견"또는 "을 (를) 찾을 수 없습니다"라는 grep의 출력을 억제하려면

echo "The short brown fox" | grep fox && echo found || echo not found 

, 당신은 할 수 있습니다 :

을이 같은 AND 및 OR 연산자를 사용할 수 있습니다 echo "The short brown fox" | grep fox >/dev/null 수익이 truthy 종료 코드 (0), 다음 echo found가 실행 그래서 만약
echo "The short brown fox" | grep fox >/dev/null && echo found || echo not found 

&& 연산자와 || 사업자, 단락, 그리고 그 또한 0의 종료 코드를 반환하기 때문에, echo not found은 실행되지 않습니다.

마찬가지로 echo "The short brown fox" | grep fox >/dev/null이 잘못된 종료 코드 (> 0)를 반환하면 echo found이 전혀 실행되지 않고 echo not found이 실행됩니다.

2

||이 같은 &&를 함께 사용하지 마십시오 명시적인 if 문을 사용하십시오. a이 성공하고 b 실패 (당신이 a && { b || c; }를 사용할 수 있지만, 그러나 if 문이 더 읽을 수있는) 경우

if echo 'The short brown fox' | grep -q 'fox'; then 
    if test -e test.txt; then 
     echo "File found" 
    else 
     echo "File not found" 
    fi 
else 
    echo "Not found" 
fi 

a && b || c은 동일하지 않습니다.

+1

이것은 한 줄로 실행할 수 없습니다. – difurious

+0

물론 가능합니다. 'if ...; 그렇다면 ...; 다음 에코; 그밖에; 에코; fi; else echo; fi'. 하지만 짧은 명령이나 올바른 명령을 원하십니까? 거의 모든 곳에서 셸의 개행 문자를 볼 수 있습니다. 세미콜론으로 바꿀 수 있습니다. – chepner

+0

태그에서'csh'에 대한 변경이 나타났습니다. 이 대답이 여전히 적용되는지 모르겠지만 'csh'에서 'bash'(또는 적어도 POSIX와 관련된 것)로 전환해야하는 이유가 많이 있습니다. – chepner

관련 문제