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
그런데 한 줄로 나열해서 작성할 때는 명령어마다 세미콜론(;)이 필요합니다. 마지막 세미콜론을 잊는 경우가 많으므로 주의해야 합니다.
참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전
'IT 이야기 > Linux 셸 스크립트' 카테고리의 다른 글
[Linux 셸 스크립트] 셸 기능 다루기 - 095 여러 URL 파일을 동시에 병렬로 내려받기 (0) | 2021.04.19 |
---|---|
[Linux 셸 스크립트] 셸 기능 다루기 - 094 명령어가 실패한 시점에 종료해 스크립트 오작동 방지하기 (0) | 2021.04.15 |
[Linux 셸 스크립트] 셸 기능 다루기 - 092 이식성을 고려한 외부 명령어 이용하기 (0) | 2021.04.14 |
[Linux 셸 스크립트] 셸 기능 다루기 - 091 scp로 파일 전송할 때 CPU 이용률을 계산해서 압축 처리를 할 것인지 판단하기 (0) | 2021.04.14 |
[Linux 셸 스크립트] 셸 기능 다루기 - 090 늘 지정한 환경 변수를 설정해서 명령어를 실행하도록 래퍼 스크립트 작성하기 (0) | 2021.04.13 |
댓글