Bash 조건문

Bash 조건문

Bash 스크립트에 사용되는 조건문의 세 가지 형식은 무엇입니까?

답변1

이것Bash 매뉴얼의 관련 부분조건부 평가에 사용할 수 있는 5가지 구성이 나열되어 있습니다. 이 중에서 if, case[[ .. ]]생성자는 아마도 실제 코드에서 가장 일반적으로 사용되지만 이 (( .. ))구문은 복잡한 계산이나 기타 수치 연산을 수행하는 스크립트에서 자주 사용됩니다.

그러나 bash에서 분기하는 또 다른 매우 일반적인 형식은 언급하지 않습니다. 즉, 단락 평가와 함께 명령을 실행하는 것입니다.

grep -q needle haystack.txt && echo "Needle located!" || echo "No dice or needles.";

&&||논리 연산자는 각각 "and"와 "or"입니다.

이는 실제로 다음과 같습니다.

if grep -q needle haystack.txt; then echo "yea"; else echo "nay"; fi;

그러나 다르게 작동합니다. 첫 번째 형식에서 조건부 논리는 실제로 코드의 실제 명시적 대상의 부작용이며, 적어도 표면적으로는 논리 연산자를 평가합니다. 이 구성은 C 및 JavaScript 코드에서도 일반적입니다.

이는 단축키를 사용하여 작동합니다. 예를 들어 표현식의 일부는 x && y || z왼쪽에서 오른쪽으로 평가됩니다. 논리 and (예: xin ) 의 왼쪽이 x && yfalse로 평가되면 이 시점에서 이미 false임을 알고 있으므로 bash해당 부분을 평가할 필요가 없습니다 .yx && y

논리적 OR의 경우 그 반대도 참입니다. true || z즉, z 결과가 무엇이든 항상 참으로 평가됩니다.

따라서 grep결과가 false인 경우 표현식의 해당 부분은 true일 수 없으므로 bash먼저 건너뛸 수 있습니다 . echo그래서 두 번째 로 넘어 갑니다 echo. 반면에 grep이 true이면 echo첫 번째 항목이 실행됩니다(단어가 에코됩니다...). 이는 오른쪽 값에 관계없이 표현식이 여전히 true로 평가되기 bash때문에 수행됩니다 .||

Bash가 조건문을 사용하는 방법을 이해하려면 명령줄에서 몇 가지 실험을 수행하는 것이 가장 좋습니다. 주문하다

echo $?;

에코됩니다반환 코드이전 진술. 이는 오류 코드이므로 0true를 나타내고, 0이 아닌 값은 false를 나타냅니다. 처음에는 약간 혼란스럽지만 익숙해집니다.

그래서 당신은 다음과 같은 것을 할 수 있습니다

$ (( 1 + 2 == 3 )); echo $?
0
$ (( 1 + 2 == 4 )); echo $?
1

[[ .. ]]그리고 이러한 기본 구성 요소를 이해하기 위해 구성에 대해 유사한 테스트를 수행합니다 . 완료되면 if프레젠테이션 으로 이동하세요 case.

귀하의 질문에 대한 답변은 귀하가 질문하는 상황에 따라 많이 달라질 수 있다고 생각합니다. 그러나 옵션을 잘 이해하면 그들이 원하는 것이 무엇인지 파악하는 데 도움이 될 것입니다.

관련 정보