1. 사용 명령어 |
(1) cp
(2) tar
2. 키워드 & 사용처 |
(1) 키워드
미정의, 기본값
(2) 사용처
환경 변수가 설정되었으면 그 값을 쓰고 설정되지 않았으면 스크립트에서 정한 기본값을 사용하고 싶을때 사용합니다.
3. 실행 예제 |
$ ./var-parameter.sh
4. 스크립트 |
#!/bin/sh
cp largefile.tar.gz ${TMPDIR:=/tmp} ①
cd $TMPDIR
tar xzf largefile.tar.gz
echo "Extract files to $TMPDIR."
5. 해설 |
이 스크립트는 변수 TMPDIR 값을 확인해서 설정값이 있으면 그 값을, 설정되어 있지 않거나 빈 문자열이면 /tmp를 작업 디렉터리로해서 아카이브 파일을 풉니다.
①에 있는 :=는 변수에 값이 설정되어 있는지 확인해서 값을 대입합니다.
${변수명:=값} 이라고 적으면 변수가 설정되어 있지 않거나 비어 있을 때는 지정한 값을 대입합니다.
즉, 환경 변수 TMPDIR에 /var/tmp라는 값이 미리 설정되어 있으면 작업 디렉터리는 /var/tmp가 됩니다. 한편, 호나경 변수 TMPDIR에 값이 설정되어 있지 않거나 빈 문자열이면 스크립트는 기본값으로 정한 /tmp를 작업 디렉터리로 사용합니다.
①에는 명령어 일부로 대입을 하는데, 스킄립트 앞 부분에 우선 이 처리를 해서 변수를 초기화하고 싶을 때에는 다음처럼 :(널 명령어)을 사용하면 됩니다.
: ${TMPDIR:=/tmp}
이 예제처럼 어떤 변수가 이미 설정되어 있는지 확인해서 설정되어 있지 않으면 기본값을 지정하는 방식은 환경 변수를 쓰는 셸 스크립트에서 자주 사용됩니다.
사용자가 /large/tmp라는 거대한 디스크를 마운트한 디렉터리를 작업 디렉터리로 사용하고 싶다고 가정합니다. 이때 다음처럼 호나경 변수 TMPDIR을 설정하고 나서 스크립트를 기동하면 스크립트 자체를 수정하지 않아도 작업 디렉터리를 지정할 수 있습니다.
$ TMPDIR=/large/tmp; export TMPDIR
$ ./var-parameter.sh
Extract files to /large/tmp.
6. :- 그리고 :? 그리고 :+ |
:=를 사용해서 기본값을 설정하면 원래 변수값을 기본값으로 덮어쓰게 됩니다. 그러지 않고 원래 변수값이 설정되어 있는지만 확인하고 값은 덮어쓰지 않을 때는 :-을 사용합니다.
<임시로 변수를 확인하고 싶을 때>
#!/bin/sh
cp largefile.tar.gz ${TMPDIR:-/tmp} ①
# $TMPDIR은 원래 값이 NULL이면 NULL인 채로 그대로 둠 ②
cd $TMPDIR
위 예에서 TMPDIR이 설정되어 있지 않으면 ①에서는 파일이 /tmp에 복사됩니다. 하지만 값 대입은 일어나지 않으므로 ②에서는 인수 없은 cd 명령어가 되어서 자신의 홈 디렉터리로 이동합니다.
그 외에도 비슷한 표기로 :?와 :+가 있습니다.
$(var:?message}
셸 변수 var 값을 돌려줍니다. 하지만 셸 변수 var가 미정의 또는 빈 문자열이면 message를 출력하고 스크립트를 종료합니다. 이것은 다음처럼 변수가 미정의 또는 비어 있으면 에러를 내면서 종료하고 싶을 때 사용합니다.
# 셸 변수 MYDIR 확인. 미정의 또는 비었으면 에러 종료
: ${MYDIR:?셸 변수 MYDIR이 설정되어 있지 않음}
다음은 :+입니다.
${var:+word}
이것은 word를 돌려줍니다. 하지만 셸 변수 var가 미정의 또는 빈 문자열이면 null을 반환합니다. 이것은 변수 MYDIR이 설정되어 있으면 1을 반환하는 if문 같은 곳에 사용됩니다.
# 셸 변수 MYDIR확인. 빈 문자열이 아닌 값이면 플래그 flg를 1로 설정
flg=${MYDIR:+1}
참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전
'IT 이야기 > Linux 셸 스크립트' 카테고리의 다른 글
[Linux 셸 스크립트] 변환처리 - 013 HTML 파일에서 특정 속성값 얻기 (0) | 2021.03.05 |
---|---|
[Linux 셸 스크립트] 변환처리 - 012 지역 변수를 함수 안에 정의해서 호출한 곳의 변수가 변경되지 않게 하기 (0) | 2021.03.05 |
[Linux 셸 스크립트] 사용자 인터페이스 - 010 파일 압축 시 실행 상태를 표시하는 진행바 표시하기 (0) | 2021.03.04 |
[Linux 셸 스크립트] 사용자 인터페이스 - 009 달력을 이용해 특정 날짜의 로그 파일 삭제하기 (0) | 2021.03.03 |
[Linux 셸 스크립트] 사용자 인터페이스 - 008 표시 문자색 변경하기 (0) | 2021.03.03 |
댓글