[Linux 셸 스크립트] 변환처리 - 011 실행 시 변수값이 비어 있을 때 기본값을 정의해서 설정하기
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] 변환처리 - 011 실행 시 변수값이 비어 있을 때 기본값을 정의해서 설정하기

by 찬찬이 아빠 2021. 3. 4.
반응형
  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}

 

 

 

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

반응형

댓글