-
쉘 스크립트Technique/LPIC 2019. 10. 20. 15:31반응형
bash 쉘을 시작으로 쉘에는 스크립트 언어에 따른 프로그래밍 기능을 더하고 있다. 이것이 쉘 스크립트이다. 쉘 스크립트를 사용하는 것으로 인해 일륜의 커맨드 라인 작업을 자동화하는 것이 가능해졌다.
쉘 스크립트의 기초
쉘 스크립트는 텍스트파일에 커맨드를 기록하는 것만으로도 작성 가능하다.
아래의 예는 몇 가지의 커맨드를 순차 실행하는 것으로 쓰여있는 lsld 스크립트를 cat 커맨드로 표시하는 것이다.
cat lsld ls -l $1 > lslink echo "Link Files" grep '^l' lslink echo "Directories" grep '^d' lslink
스크립트를 실행하기 위해선 source 커맨드를 사용한다. 이 경우 스크립트파일에 읽어 들일 것이 필요하다. 또한 이 파일이 존재하는 디렉터리에는 실행 권한이 필요하다. 스크립트 파일 자체적인 실행 권한은 필요 없다.
source lsld
source를 간소화하여 [.]으로 바꿔 쓰는 것도 가능하다.
. lsld
파일에 실행 권한을 부여하면 source 커맨드를 사용하지 않더라도 파일명을 입력하는 것만으로도 실행 가능하게 된다.
chmod a+x lsld
./lsld주의
현지 디렉터리에 있는 스크립트를 실행하기 위해서는 [./]을 붙일 필요가 있는 것은 해당 디렉터리 패스가 통하지 않는 ( 변수 PATH에 해당 디렉터리가 포함되어 있지 않음) 경우이다. 패스가 정해져 있는 디렉터리 내에 있는 스크립트 파일은 [./]를 붙이지 않더라도 사용 가능하다.쉘 상에 커맨드를 실행하면 쉘은 자식 프로세스로서 커맨드를 실행하고 대항 실행이 종료될 때까지 대기한다.
exec 커맨드를 사용하면 쉘 스크립트를 실행하고 있는 쉘의 프로세스가 지정한 커맨드의 프로세스로 바꿔진다.
exec 커맨드
쉘 스크립트를 사용한 처리에서는 쉘을 대기시킬 필요가 없는 케이스가 있다. 예를 들어 X window System에서 윈도우 매니저를 기동하는 것과 같은 경우에, 윈도우 매니저 실행 후에는 대기하고 있는 쉘의 프로세스는 불필요하기 때문에 그럴 경우 exec 커맨드를 사용 하는 것을 권장한다.
스크립트에 인수 넘기기
일반적인 커맨드와 같이 쉘 스크립트에도 인수가 필요할 경우가 있다. bash에는 아래와 같은 변수를 이용하여 인수에 참조가 가능하다.
변수명 설명 $0 쉘 스크립트 파일명 ( 풀 패스 ) $1 1번째 인수 $2 2번째 인수 이후 $3, $4 $n... 순으로 진행된다 $# 인수의 숫자 $@ 모든 인수 ( 스페이스로 나눔 ) $* 모든 인수 ( 환경변수 IFS로 지정된 문자로 나눈다 ) 실행 결과의 return 값
커맨드를 실행하면 종료 시에 쉘에 대하여 return 값을 돌려준다. 정상 종료한 경우에는 0 정상 종료하지 않은 경우에는 0 이외의 값을 돌려준다. 이 돌려주는 값을 이용한다면 커맨드의 실행이 정상 종료되었는가를 판정할 수 있다. 돌아오는 값은 변수 $? 에 저장된다.
ls -l file3 ls: file3을 찾을 수 없다 : 해당 파일이나 디렉터리는 존재하지 않는다 echo $? 2 echo $? 0
첫 번째의 결과는 ls 커맨드가 에러를 돌려주었다는 return 값 2가 된다. 2번째의 결과는 최초의 echo 커맨드가 정상 종료하였기 때문에 return 값은 0 가된다. 커맨드를 실행할 때마다 변수 $? 값이 초기화되어 새로운 return 값을 저장하는 방식이다.
반응형'Technique > LPIC' 카테고리의 다른 글
쉘 스크립트 간단한 문법 정리 (0) 2019.10.20 파일의 체크 (0) 2019.10.20 bash의 설정 파일 (0) 2019.10.20 함수의 정의 (0) 2019.10.20 쉘 (0) 2019.10.14