Offcanvas

How To / 개발자 / 운영체제

블로그 | 예제로 알아보는 리눅스의 &&, || 그리고 !

2022.05.06 Sandra Henry-Stocker  |  Network World
&&, || 및 ! 연산자를 사용하면 리눅스에서 여러 유용한 명령을 실행할 수 있다. 단 먼저 if-then-else 명령어보다 조금 까다로운 구문에 익숙해져야 한다.

먼저, 이 포스팅에 있는 명령어 예제의 공통점 중 하나는 필자가 간단한 ‘if’ 테스트라고 부르는 것을 사용한다는 점을 언급할 필요가 있다. 여기 예제가 있다. 



-f donuts 명령은 ‘도넛(donuts)’이라는 이름의 파일(-f)이 있는지 묻는다. 반송 코드를 나중에 ‘echo $?’로 표시하지 않으면, 테스트 결과가 표시되지 않는다. 이 경우 (0이 아닌) 거짓이다. 우리는 파일이 존재하지 않는다는 것을 알게 된다. 우리에게 도넛은 없다! 유사하지만 반대되는 테스트를 구성하기 위해 어떤 도넛 파일도 존재하지 않는지 물어볼 수 있다. 이 테스트는 다음과 같다. 



이때 결과는 참(0)이다. 또다시 도넛은 없다. 그러나 이러한 명령이 사용되곤 하는 방법이 아니다. 대신 && 또는 || 연산자를 끝에 추가하여 실행된 테스트 결과에 따라 일부 명령을 실행할 수 있다. 예를 들어, 도넛 파일이 없는 경우 당신은 다음과 같은 불만을 제기할 수 있다.



이 명령을 이해하는 핵심은 &&이 ‘AND’ 연산자이고 ||의 경우 ‘OR’ 연산자라는 것이다. 위와 같은 명령을 실행할 경우, ‘도넛’이라는 이름의 파일이 없는 경우 명령어 양쪽(테스트 및 결과 명령)이 실행될 것이다. 이 명령어의 의도는 기본적으로 “도넛이라는 이름의 파일이 존재하지 않으면 에코(echo) 명령을 사용하여 텍스트를 표시하라”이다. &&을 사용하여 테스트 결과가 참일 때마다 &&의 오른쪽에 있는 명령이 실행된다. 결과가 거짓이면 명령이 종료된다. 아래의 명령은 ‘mydir라는 이름의 디렉토리가 있는 경우’ 목록을 표시하라는 것이다.



다음 예제에서 우리는 디렉토리가 존재하지 않는지 테스트한다. 그렇지 않으면 mkdir 명령에서 해당 명령어를 생성한다. 아래 표시된 두 번째 명령은 디렉토리가 생성되었는지 확인한다. 디렉토리가 이미 존재하는 경우 명령에서 오류 상태가 발생하고 mkdir 명령이 실행되지 않을 것이다.



||을 사용하면 그 반대가 참이다. 명령의 첫 번째 부분이 성공하면(‘참’이 됨), 두 번째 부분은 실행되지 않는다. && 연산자의 경우, 다음의 논리가 실행된다.



||를 사용하여 명령을 실행하는 경우 명령의 두 번째 부분은 첫 번째 부분이 실패할 경우에만 실행될 것이다. 첫 번째 부분이 성공하면 명령이 종료된다. 즉, 어느 한 부분이 작동하면 전체 명령이 성공한다. || 연산자의 경우, 다음의 논리가 실행된다.



다음 예제에서 우리는 ‘스크립트(scripts)’라는 이름의 디렉토리가 있는지 묻는다. 만약 없다면(즉, 테스트 결과가 ‘거짓’인 경우), 명령어의 두 번째 부분이 실행되고 mkdir 명령어가 그것을 생성한다. 스크립트 디렉토리가 있으면 명령이 종료되고 mkdir 명령이 실행되지 않는다.

마무리
&&과 ||의 동작이 다르더라도 두 연산자 중 하나를 사용하여 동일한 결과를 얻을 수 있다. 아래 예제가 이를 설명해준다. 아래의 각 명령은 노트(notes)라는 파일이 없으면 노트라는 이름의 파일을 만들고 노트가 있으면 아무것도 하지 않는다.



마찬가지로, 아래의 두 명령 각각은 스크립트 디렉토리가 아직 존재하지 않는 경우 스크립트 디렉토리를 생성하고 존재하는 경우에는 변경하지 않는다.



&& 및 ||을 사용하는 것이 다소 까다로워 보일 수 있지만, 약간의 연습과 몇 가지 유용한 예제 명령은 실제로 효과를 볼 수 있다. ciokr@idg.co.kr
추천 테크라이브러리

회사명:한국IDG 제호: ITWorld 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아00743 등록일자 : 2009년 01월 19일

발행인 : 박형미 편집인 : 박재곤 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2022 International Data Group. All rights reserved.