본문 바로가기
IT/리눅스 쉘 스크립트

리눅스 쉘스크립트 변수 확장 이해 - Linux shell parameter expansion

by 꾸꾸웍스 2023. 1. 11.
반응형

linux shell script parameter expansion 썸네일
linux shell script parameter expansion

 

 

리눅스 쉘스크립트 변수에 대해 다시 한번 복습하며 기본적으로 리눅스 쉘 또는 쉘스크립트를 작성할 때 변수의 기본적인 방법에 대해 사용할 줄 안다면 좀 더 나아가 기본적인 변수 선언, 출력뿐만 아니라 리눅스 쉘스크립트에서 변수 확장 선언, 확장 선언한 변수를 출력하는 방법에 대한 이해를 돕는 내용을 소개해드리겠습니다.

 

 

※ 목차 구성
1) 리눅스 쉘스크립트 변수 이해
2) 리눅스 변수 선언
3) 리눅스 변수 확장 선언
4) 리눅스 쉘스크립트 변수 확장 예시

 

 

 

리눅스 쉘스크립트 변수 이해

리눅스 쉘 또는 쉘스크립트를 작성할 때 사용되는 변수는 사용자가 입력한 변수의 데이터 값은 컴퓨터 저장장소 메모리에 이동되어 저장되고 데이터를 연산하여 사용자가 호출하여 연산된 데이터를 출력하는 것을 말합니다. 선언하는 방법에 따라 변수를 어떻게 할당하느냐에 따라 데이터의 크기는 달라지며 선언, 호출, 삭제 등 각각 여러 가지의 방법들이 존재합니다.

 

따라서 기본적으로 변수를 선언하고 출력하는 방법에 대해 이해하거나 숙지하였다면 리눅스 쉘 또는 쉘스크립트에서 리눅스 변수 확장 선언을 알아보겠습니다. 이전에 기본적인 변수를 선언하고 호출하는 방법과 변수 사용 예제들에 대한 자세한 내용은 아래 링크를 참고해주시기 바랍니다.

 

 

리눅스 변수선언, 변수호출

 

[shell script] 쉘 스크립트 기초 #2, 기초 문법 - 변수 선언, 변수 호출

[shell script] 쉘 스크립트 기초 문법 - 변수 선언, 변수 호출 ※ 목차 1. 쉘 스크립트에서 변수(Variable) 란??? 2. 쉘 스크립트 변수 기초 문법 및 주의사항 3. 변수 할당 - 숫자 4. 변수 할당 - 문자 5. 변

rhrhth23.tistory.com

 

 

리눅스 쉘스크립트 변수 예제

 

[shell script] 쉘 스크립트 기초#3, 기초 예제 - 변수 사용 예제

[shell script] 쉘 스크립트 기초 예제 - 변수 사용 예제 ※ 목차 1. 변수 할당 - 숫자 활용 예제 2. 변수 할당 - 문자 활용 예제 3. 변수 할당 - 명령어 활용 예제 1. 변수 할당 - 숫자 예제 변수를 숫자로

rhrhth23.tistory.com

 

 

반응형

 

 

리눅스 변수 선언

리눅스 변수 선언은 변수를 사용할 이름을 정하고 해당하는 값을 선언하는 방식입니다. 이 내용은 위 2개의 포스팅에 자세한 내용이 나와있지만 리눅스 변수 확장 선언을 위해 다시 한번 다루어 보겠습니다.

 

name=value

 

변수의 이름은 지정한 대, 소문자를 구분하고 지정했던 변수이름 그대로 출력명령어를 이용해 변수를 호출하는 방식입니다. 변수의 들어갈 값은 문자, 숫자, 특수문자, 명령어 등이 들어갈 수 있으며 할당되는 값에 따라 큰따옴표, 작은따옴표, 억음부호 등 달라질 수 있습니다. 이에 대한 내용도 마찬가지로 위 2개의 포스팅에 자세히 나와 있습니다.

 

▼ 리눅스 터미널 쉘에서 변수 선언

root@server # color=red

root@server # echo $color
red

root@server # echo ${color}
red

 

▼ 리눅스 쉘스크립트 파일 만들기

root@server # touch script.sh

root@server # chmod 755 script.sh

root@server # ls -l
-rwxr-xr-x 1 root root 0 Jan 10 10:34 script.sh

 

▼ 리눅스 쉘스크립트 script.sh 파일에 변수선언 내용 작성 후 스크립트 파일 실행으로 변수 호출

root@server # vim script.sh
#!/bin/bash

color=red

echo $color
echo ${color}

root@server # ./script.sh
red
red

 

 

 

 

리눅스 변수 확장 선언

리눅스 쉘 변수 확장(Parameter Expansion)은 기본적으로 할당되어 사용된 변수와는 다르게 변수를 표현하는 식을 중괄호 또는 산술기호 등을 사용하여 외부로부터 입력받은 파라미터 변수의 값을 확장시켜 주는 것입니다. 예를 들어 A라는 변수의 1의 값이 들어있다고 가정한다면 변수 확장을 사용하여 1이 아닌 다른 값을 사용할 수 있습니다.

name=value

 

 

변수 확장 표현식 설명

리눅스 변수 선언 확장에 대한 표현식은 아래 4가지이며 이외 방법은 string 패턴 표현을 확장하는 방법이 있습니다. 리눅스 변수 확장 표현식에 대한 설명은 아래와 같습니다.

  • $name
    - 변수의 이름의 값이 대체됩니다.
  • ${name}
    - 변수의 이름의 값이 대체됩니다. (중괄호 사용설명에 대한 내용은 다음 목차의 예시에 참고)
  • ${name:-word}
    - name에 대한 변수 설정이 되어있지 않거나 null이면 word가 대체되고, 그렇지 않으면 name의 값이 대체됩니다.
  • ${name:+word}
    - name에 대한 변수 설정이 되어있지 않거나 null이면 아무것도 대체되지 않고, 그렇지 않으면 단어가 대체됩니다.
  • ${name:=word}
    - name에 대한 변수 설정이 되어있지 않거나 null이면 word가 name에 할당된 다음 name의 값이 대체됩니다. 그렇지 않으면 name의 값이 대체됩니다.
  • ${name:?word}
    - name에 대한 변수 설정이 되어있지 않거나 null이면 word가 표준 오류에 기록됩니다. 그렇지 않으면 name의 값이 대체됩니다.

 

 

 

 

리눅스 쉘스크립트 변수 확장 예시

$name ${name} 차이

name 변수이름의 value의 값을 선언 후 name 변수를 출력한다면 둘 다 같은 결과입니다. 하지만 리눅스 쉘스크립트를 작성하거나 쉘에서 변수 뒤에 문자나 숫자가 붙을 수 있기 때문에 선언한 변수 name을 중괄호로 묶어주고 출력합니다. 이 경우를 제외한 경우에 중괄호 사용은 선택사항입니다.

 

▼ $name ${name} 차이 예시

root@server # name=value

root@server # echo $name ${name}
value value

root@server # echo $name123 $namekim

root@server # echo ${name}123 ${name}kim
value123 valuekim

 

 

리눅스 쉘스크립트 변수 확장 예시

${name:-word} 표현식

위와 같은 리눅스 변수 선언 확장 표현식은 name변수의 값이 할당되었다면 name 변수의 값이 출력되고 변수가 할당되지 않았다면 word가 출력됩니다. 

echo ${name:-kim}

 

▼ ${name:-word} 표현식 예시

root@server # name=hong

root@server # echo ${name}
hong

root@server # unset name

root@server # echo ${name}

root@server # echo ${name:-kim}
kim

 

name의 변수 값인 hong를 선언 후 출력하면 hong가 출력됩니다. 그다음 unset 명령으로 name 변수를 삭제했기 때문에 name은 출력되지 않지만 할당되지 않은 name 변수에 kim을 대체하는 표현식을 사용해 name의 값이 kim으로 대체되어 출력됩니다.

 

 

${name:+word} 표현식

위와 같은 리눅스 변수 선언 확장 표현식은 name변수의 값이 할당되었다면 word가 대체되어 출력되고 변수가 할당되지 않았다면 아무것도 대체되지 않습니다.

echo ${name:+lee}

 

▼ ${name:+word} 표현식 예시

root@server # name=hong

root@server # echo ${name}
hong

root@server # echo ${name:+lee}
lee

root@server # unset name

root@server # echo ${name}

root@server # echo ${name:+lee}

 

name의 변수 값인 hong를 선언 후 출력하면 hong가 출력됩니다. 변수가 할당되어 있는 변수를 가지고 확장 표현식을 이용해 lee를 출력하면 name의 변수 값이 lee로 대체되어 lee가 출력됩니다. 그다음 unset 명령으로 name 변수를 삭제했기 때문에 name이 출력되지 않고 변수가 할당되어 있지 않기 때문에 lee의 변수 값 또한 대체되지 않고 아무것도 출력되지 않습니다.

 

 

${name:=word} 표현식

위와 같은 리눅스 변수 선언 확장 표현식은 name변수의 값이 할당되었다면 name 변수의 값이 출력되고 변수가 할당되지 않았다면 word가 name에 할당되어 출력됩니다. 

echo ${name:=choi}

 

▼ ${name:=word} 표현식 예시

root@server # name=hong

root@server # echo ${name}
hong

root@server # echo ${name:=choi}
hong

root@server # unset name

root@server # echo ${name}

root@server # echo ${name:=choi}
choi

 

name의 변수 값인 hong를 선언 후 출력하면 hong가 출력됩니다. 변수가 할당되어 있는 변수를 가지고 확장 표현식을 이용해 choi를 출력하면 기존 name의 변수 값인 hong이 출력됩니다. 그다음 unsetunset 명령으로 name 변수를 삭제했기 때문에 name이 출력되지 않고 변수가 할당되어 있지 않기 때문에 choi의 변수 값이 name에 할당되어 name 값이 대체되어 출력됩니다.

 

 

${name:?word} 표현식

위와 같은 리눅스 변수 선언 확장 표현식은 name변수의 값이 할당되었다면 name 변수의 값이 출력되고 변수가 할당되지 않았다면 word가 표준오류에 기록되고 쉘이 0이 아닌 종료상태로 종료됩니다.

echo ${name:?park}

 

▼ ${name:?word} 표현식 예시

root@server # name=hong

root@server # echo ${name}
hong

root@server # echo ${name:?park}
hong

root@server # unset name

root@server # echo ${name}

root@server # echo $?
0

root@server # echo ${name:?park}
-bash: name: park

root@server # echo $?
1

 

name의 변수 값인 hong를 선언 후 출력하면 hong가 출력됩니다. 변수가 할당되어 있는 변수를 가지고 확장 표현식을 이용해 park를 출력하면 기존 name의 변수 값인 hong이 출력됩니다. 그다음 unsetunset 명령으로 name 변수를 삭제했기 때문에 name이 출력되지 않지만 종료코드 0을 반환하여 성공으로 종료하였고 변수가 할당되어 있지 않기 때문에 park의 변수 값은 출력되지 않고 오류를 표시하면서 종료코드가 0이 아닌 종료상태로 종료됩니다.

 

 

 

 

반응형
그리드형

댓글