본문 바로가기
ETC

[Bash] &&를 쓰는 이유

by devson 2022. 11. 28.

먼저 bash에서 &&는 일반적인 고수준 프로그래밍 언어에서 지원하는 AND 연산자와 동일한 역할을 한다.

 

Bash Reference Manual - 3.2.4 Lists of Commands
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Lists

 

AND 이기 때문에

- 앞서 실행된 커맨드의 결과가 성공(zero exit status)인 경우, 뒤의 커맨드를 실행시켜야지 AND 연산 결과를 알 수 있기 때문에 뒤의 커맨드를 실행한다.

- 앞서 실행된 커맨드의 결과가 실패(non-zero exit status)인 경우, AND 연산 결과가 failure이기 때문에 뒤의 커맨드를 실행시키지 않고 연산이 종료된다.

 

즉, &&를 쓰면 앞의 커맨드가 정상적으로 실행이 완료(exit status가 0)되는 경우에만, 뒤의 커맨드를 실행하라는 의미이다.


 

간단하게 예를 들어보자.

아래와 같이 실행 후 정상적(zero exit status)으로 종료되는 스크립트 success.sh

## success.sh
#!/bin/bash

echo It will be succeeded!!
exit 0

오류(non-zero exit status)로 종료되는 스크립트 failure.sh가 있다고 하자.

## failure.sh
#!/bin/bash

echo It will be failed...
exit 1

 

스크립트 실행을 나열한 스크립트

#!/bin/bash

./failure.sh
./success.sh

위 스크립트를 실행하면 단순히 스크립트를 연달아 실행한다.

$ ./script.sh
It will be failed...
It will be succeeded!!

 

&&를 사용한 스크립트

#!/bin/bash

./failure.sh && ./success.sh

위 스크립트를 실행하면 failure.shexit status1이기 때문에 뒤의 스크립트를 실행시키지 않는다.

$ ./script.sh
It will be failed...

 

exit code를 직접 확인하는 스크립트

혹은 아래와 같이 스크립트 실행 결과(exit status)를 변수에 담아 if 문을 통해 분기를 하는 방법도 있다.

#!/bin/bash

./failure.sh
result=$?

if [ $result != 0 ]
then
  exit $result
fi

./success.sh

 


 

참고:

- Stack Overflow: What is the purpose of "&&" in a shell command?

- Shell Command Language

- Bash Reference Manual

댓글