article thumbnail image
2018. 9. 16. 17:44
728x90

script 실행 도중 에러 발생시 script를 멈추게 하는 방법

Shell Script를 실행하다보면 여러개의 명령중 하나의 명령이 실패했을 때 남아 있는 명령을 실행하면 안되는 경우가 있다.


이런 경우를 위해서 명령을 실행하고 실패시 곧바로 script의 실행을 막아주는 명령이 바로 set -e 이다.


#!/bin/sh
set -e
wget http://abc.com/target_file
chmod 755 target_file
ls -al target_file


위 스크립트는 wget으로 파일을 받아 와서 퍼미션을 부여하는 것인데 URL이 존재하지 않으면 파일이 생성되지 않으므로 chmod 명령을 수행 할 수 없게 된다.


계속해서 에러가 발생하는 것을 방지하기 위해 set -e 명령을 추가하게 되면 실패한 명령에서 곧바로 script의 실행이 멈추게 된다.


반대로 set +e는 에러가 발생해도 계속해서 명령을 실행하도록 해준다.

일부의 명령만 적용되게 하려면?

set -e와 +e를 적절히 섞어서 사용하면 된다.


#!/bin/sh
set -e #이제 에러나면 멈춘다
wget http://abc.com/target_file
chmod 755 target_file
set +e  #에러나도 안멈춰
cp target_file target_file_backup
set -e #다시 에러나면 멈춘다
ls -al target_file


위와 같이 섞어서 사용하게 되면 cp 명령은 실패하더라도 다음 명령을 계속해서 진행하게 된다.

728x90
복사했습니다!