![표준 출력을 기준으로 하는 조건인 경우](https://linux55.com/image/142094/%ED%91%9C%EC%A4%80%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C%20%ED%95%98%EB%8A%94%20%EC%A1%B0%EA%B1%B4%EC%9D%B8%20%EA%B2%BD%EC%9A%B0.png)
조건부로 끝나는 여러 명령이 파이프를 통해 연결되어 있습니다 awk
. 아래 예
command1 | command 2 | awk '$1 > 800'
이제는 때로는 몇 줄을 출력하고 때로는 출력하지 않습니다. 일부 출력(1줄 이상)이 있는 경우에만 true로 입증되는 조건을 원합니다. 이를 작동시킬 수 있는 방법이 있습니까?
좋다,
if command1 | command 2 | awk '$1 > 800' (some output); then
do command3
else; (blank output)
Do nothing
답변1
평소에는 그냥 사용하는데명령 대체, 그런 다음 테스트에 넣습니다.
if [ ! -z "$(command1 | command 2 | awk '$1 > 800')" ]; then command3; fi
설명하다
- 귀하의 질문에 따라 명령이 실행됩니다.
command1 | command 2 | awk '$1 > 800'
- 출력은 test 로 전달되며 , 길이가 0인 문자열이
[ ! -z "$(…)" ]
아닌 경우 true로 평가됩니다 .!
-z
따라서 명령 파이프라인의 출력이 있으면 then
명령이 실행됩니다.
답변2
awk
명령문에 대한 올바른 반환 코드를 사용하여 스크립트를 종료합니다 if
.
if command1 | command2 | awk '$1 > 800 { c++; print } END { exit (c == 0) }'
then
command3
fi
아니면 실제로 그렇게 하지 않는다면필요프로그램 출력 awk
:
if command1 | command2 | awk '$1 > 800 { c++; exit } END { exit (c == 0) }'
then
command3
fi
답변3
awk
다음과 같이 원하는 종료 코드를 인쇄 할 수 있습니다 .
echo 900 | awk '{ print !($1 > 800) }'
(
그런 다음 및 를 사용하여 하위 쉘에 래핑하여 exit
값을 반환할 수 있습니다 awk
.
echo 900 | (exit $(awk '{ print !($1 > 800) }'))
그런 다음 파이프라인의 일부로 사용할 수 있습니다.
echo 900 | (exit $(awk '{ print !($1 > 800) }')) && echo yes || echo no