리눅스 셸 스크립트: 변수 생성 및 사용하기
이 글에서는 셸 스크립트에서 변수를 사용하는 방법에 대해 자세히 알아보겠습니다. 변수의 정의부터 시작하여, 셸 스크립트에서 변수를 생성하고 사용하는 방법, 특수 변수의 이해, 변수 확장 기법, 그리고 환경 변수와 셸 변수의 차이점에 대해 알아보냅니다.
☞ 포스트 기준: 리눅스 배포판 CentOS 7
1. 변수의 기본 개념
변수는 데이터를 저장하는 데 사용되는 이름이 지정된 저장공간입니다. 셸 스크립트에서 변수는 명령어의 재사용, 설정의 관리, 그리고 스크립트의 유연성을 높이는 데 중요한 역할을 합니다.
2. 변수 생성 및 할당
셸 스크립트에서 변수를 생성하고 할당하는 방법은 다음과 같은 규칙을 따릅니다. 변수명은 문자, 숫자, 밑줄(_)을 포함할 수 있으나, 숫자로 시작할 수는 없습니다.
MY_VAR=Hello
: 변수에 문자열을 할당할 때 인용 부호를 생략할 수 있습니다. 공백이나 특수 문자가 없는 경우에 해당합니다.MY_VAR='Hello, World'
: 단일 인용 부호를 사용하여 공백이 포함된 문자열 값을 할당합니다.MY_VAR="Hello, World"
: 이중 인용 부호를 사용하여 공백이 포함된 문자열 값을 할당합니다. 이중 인용 부호는 변수 확장, 명령 대체, 산술 확장 등을 허용합니다.
: 숫자를 변수에 할당하면, 이는 문자열 ‘5+2’로 처리됩니다.MY_VAR
=5+2MY_VAR="$ANOTHER_VAR"
: 다른 변수의 값을 참조하여 할당할 수 있습니다.MY_VAR =
: 변수에 값을 할당할 때는 ‘=’ 앞뒤에 공백을 사용하지 않습니다."Hello, World"
산술 연산과 expr 사용법
셸 스크립트에서 expr
명령어를 사용하여 산술 연산을 수행하고 그 결과를 변수에 할당할 수 있습니다. 곱셈 연산자(*
)와 괄호(()
)를 사용할 때는 역슬래시(\
)를 앞에 붙여야 합니다.
num=$(expr 2 + 2)
: 2와 2를 더한 결과를 변수 num에 할당합니다.num=$(expr 2 - 2)
: 2에서 2를 뺀 결과를 변수 num에 할당합니다.num=$(expr 2 \* 2)
: 2와 2를 곱한 결과를 변수 num에 할당합니다.num=$(expr \( 2 + 2 \) \* 3)
: 2와 2를 더한 후 3으로 곱한 결과를 변수 num에 할당합니다.
3. 변수 사용
변수를 사용하여 셸 스크립트에서 데이터를 저장하고 참조할 수 있습니다. $
기호를 사용하여 변수의 값을 가져올 수 있습니다. 다음은 변수 사용의 예시입니다.
$ MY_NAME="Blue, Share" $ age=$(expr 29 + 1) $ echo $MY_NAME Blue, Share $ echo $age 30
이 예시에서 MY_NAME
변수에 문자열 “Blue, Share”를 할당하고, age
변수에는 expr
명령어를 사용하여 계산된 결과인 30을 할당합니다. echo
명령어를 사용하여 이들 변수의 값을 출력합니다.
![리눅스 변수 생성 및 사용 예시](https://bluesharehub.com/wp-content/uploads/2023/12/image-3.png)
![리눅스 변수 생성 및 사용 예시](https://bluesharehub.com/wp-content/uploads/2023/12/image-3.png)
4. 특수 변수
셸 스크립트에는 여러 특수 변수들이 있습니다. 예를 들어, $0
은 스크립트의 이름을, $1
, $2
등은 스크립트에 전달된 인자들을 나타냅니다. $#
은 인자의 수를, $?
는 마지막으로 실행된 명령의 종료 상태를 반환합니다.
5. 변수 확장
변수 확장은 셸 스크립트에서 변수의 값을 변형하거나 조작할 때 사용합니다. 다음은 변수 확장의 몇 가지 예시입니다.
MY_NAME="Blue, Share" $ echo ${MY_NAME,,} blue, share $ echo ${MY_NAME^^} BLUE, SHARE $ echo ${MY_NAME:6:5} Share $ echo ${#MY_NAME} 11
이 예시에서는 MY_NAME
변수를 다음과 같이 조작합니다:
${MY_NAME,,}
는 변수의 모든 대문자를 소문자로 변환합니다.${MY_NAME^^}
는 모든 소문자를 대문자로 변환합니다.${MY_NAME:6:5}
는 문자열의 6번째 위치에서 5글자를 추출합니다.${#MY_NAME}
는 변수MY_NAME
의 길이를 계산합니다.
![리눅스 변수 확장 예시](https://bluesharehub.com/wp-content/uploads/2023/12/image-4.png)
![리눅스 변수 확장 예시](https://bluesharehub.com/wp-content/uploads/2023/12/image-4.png)
6. 환경 변수와 셸 변수의 차이
셸 스크립트에서는 환경 변수와 로컬(셸) 변수를 구분합니다. 환경 변수는 시스템 전체에 걸쳐 접근 가능한 반면, 로컬 변수는 스크립트나 세션 내에서만 접근 가능합니다.
관련 이전 게시글
- 리눅스 명령어 도움말 및 매뉴얼 확인하기: –help, man, info
- 리눅스 chmod 명령어: 파일과 디렉토리의 접근 권한 설정하기
- 리눅스 ls 명령어: 디렉토리 내용 확인하기
- 리눅스 grep 명령어: 파일 내에서 문자열 검색 및 패턴 찾기
- 리눅스 history 명령어: 과거 명령어 기록 검색 및 활용하기
다음 글에서도 셸 스크립트에 대해 알아볼 예정입니다. 도움이 되셨다면 공유해 주세요!