if else 질문이 있는데 답변이 맞는지 잘 모르겠습니다. [복사]

if else 질문이 있는데 답변이 맞는지 잘 모르겠습니다. [복사]

저는 이것을 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.

관련 정보