![if else 질문이 있는데 답변이 맞는지 잘 모르겠습니다. [복사]](https://linux55.com/image/155592/if%20else%20%EC%A7%88%EB%AC%B8%EC%9D%B4%20%EC%9E%88%EB%8A%94%EB%8D%B0%20%EB%8B%B5%EB%B3%80%EC%9D%B4%20%EB%A7%9E%EB%8A%94%EC%A7%80%20%EC%9E%98%20%EB%AA%A8%EB%A5%B4%EA%B2%A0%EC%8A%B5%EB%8B%88%EB%8B%A4.%20%5B%EB%B3%B5%EC%82%AC%5D.png)
저는 이것을 Linux에서 실행하고 있습니다:
$ number=4
$ test $number -eq 4
$ echo $?
0
$ test $number -lt 2
$ echo $?
1
결과(0과 1)가 정확합니까?
답변1
Unix 시스템에서 유틸리티가 오류 없이 원활하고 성공적으로 실행되면 유틸리티는 0 종료 상태를 반환합니다. 유틸리티가 실패하면 0이 아닌 종료 상태를 반환합니다.
이렇게 하면 종료 상태를 통해 문제가 발생했을 때 사용자에게 알릴 수 있습니다("종료 값" 또는 일부 매뉴얼의 유사한 섹션 참조) rsync
. 간단히 말해서, 작업이 성공하면 종료 상태는 0이고, 0이 아니면 실패하며, 종료 상태는 실패 이유를 나타낼 수 있습니다.
사용하는 유틸리티는 test
이 패턴을 따르며 비교가 성공하면("true") 0을 반환합니다. 비교(또는 수행하는 모든 작업)가 실패하면("false") 0이 아닌 종료 상태를 반환합니다.
이 if
키워드는 유틸리티를 사용하여 종료 상태에 따라 작동합니다. 유틸리티가 0 종료 상태를 반환하면 기본 분기를 사용하고, 그렇지 않으면 다음 else
분기를 사용합니다.
if test 4 -eq 3; then
echo 4 is 3
else
echo 4 is not 3
fi
if
모든 유틸리티를 사용할 수 있습니다.
if grep -q 'secret' file.txt; then
echo file.txt contains secret
else
echo file.txt does not contain secret
fi
if mkdir mydir; then
echo created directory mydir
else
echo failed to create directory mydir
fi
답변2
관례적으로 0
이는 작업이 성공했음을 의미하며 0 이외의 값은 오류입니다. 따라서 $?
이면 0
테스트가 성공하고, 그렇지 않으면 0
이면 1
테스트가 실패합니다.
다음을 실행하면 더 명확하게 확인할 수 있습니다.
$ number=4
$ if test $number -eq 4; then echo "YES ($?)"; else echo "NO ($?)"; fi
YES (0)
$ if test $number -lt 2; then echo "YES ($?)"; else echo "NO ($?)"; fi
NO (1)
답변3
쉘은 그렇지 않습니다 C
. 0은 거짓 이지만 C
나머지는 모두 참입니다. 쉘 0은 참/성공이지만 다른 모든 것은 거짓입니다. 실패하는 방법은 많지만 성공하는 방법은 한 가지이기 때문입니다.
구체적인 정보는 테스트 정보 페이지에서 제공됩니다.
Exit status:
0 if the expression is true,
1 if the expression is false,
2 if an error occurred.