[Linux 셸 스크립트] 셸 기능 다루기 - 093 리다이렉트가 번잡하지 않도록 그룹핑해서 보기 좋게 만들기
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] 셸 기능 다루기 - 093 리다이렉트가 번잡하지 않도록 그룹핑해서 보기 좋게 만들기

by 찬찬이 아빠 2021. 4. 14.
반응형
  1. 사용 명령어

(1) echo

 

  2. 키워드 & 사용처

(1) 키워드

리다이렉트, 그룹핑

 

(2) 사용처

여러 명령어 결과를 같은 파일에 리다이렉트해서 출력하는 걸 한꺼번에 묶어서 작성하고 싶을 때 사용합니다.

 

  3. 실행 예제
$ ./echo-redirect.sh
$ cat output.log
[Script start]
Wed Apr 14 11:11:11 KST 2021
echo-redirect.sh
output.log
script.sh
[Script end]

 

 

  4. 스크립트

#!/bin/sh

 

# 중괄호로 그룹핑해서 리다이렉트를 하나로 합치기

{       

    echo "[Script start]"

    date

    ls

    echo "[Script end]"

} > output.log       

 

 

  5. 해설

이 스크립트는 여러 명령어 결과를 합쳐서 하나의 파일로 리다이렉트해서 출력합니다. { } (중괄호)로 그룹핑하는 것이 중요합니다. date 명령어로 날짜를 표시한 다음 ls 명령어를 실행합니다. 중괄호 안에 내용은 원하는 내용으로 작성하면 됩니다.

 

셸 스크립트를 만들다 보면 명령어 결과를 같은 파일에 리다이렉트하는 처리를 몇 줄에 걸쳐 반복해서 작성해야 할 때가 있습니다. 이런 문법은 읽기도 힘들고 작성하기도 번거롭습니다.

echo "[Script start]" > output.log
date >> output.log
ls >> output.log
echo "[Script end]" >> output.log

이렇듯 리다이렉트가 이어질 때는 처럼 중괄호를 써서 명령어 묶음을 그룹핑합니다. 그룹핑을 사용하면 처럼 마지막에 한 번만 리다이렉트하면 되므로 스크립트가 깔끔해집닏.ㅏ 보기도 좋고 리다이렉트하는 파일을 바꾸고 싶을 때도 한 곳만 수정하면 되므로 보수성도 좋아지고 코딩 스타일로도 좋습니다.

 

그런데 그룹핑을 중괄호가 아니라 ( ) 소괄호를 사용할 때도 있습니다. 소괄호로 그룹핑을하면 내부 명령어는 서브셸로 실행됩니다. 예제에서는 별 차이가 없지만 예들 들어 cd 명령어로 디렉터리를 이동하면 서브셸에서 빠져나갈 때 원래 디렉터리로 돌아가므로 중괄호의 그룹핑과 달라집니다.

 

 

<주의사항>

다음처럼 중괄호 안에서 명령어를 한 줄로 작성할 수 없습니다. 짧은 명령어가 2~3개 정도라면 이쪽이 더 보기 좋을 수도 있습니다.

{ echo "[Script start]"; date; ls; echo "[Script end]"; } > output.log

그런데 한 줄로 나열해서 작성할 때는 명령어마다 세미콜론(;)이 필요합니다. 마지막 세미콜론을 잊는 경우가 많으므로 주의해야 합니다.

 

 

 

참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전

반응형

댓글