LINUX/리눅스 쉘 스크립트 바이블 정리

[리눅스 바이블] 6. 리눅스 환경 변수 사용하기

은재정 2022. 2. 6. 17:34

 

환경 변수 살펴보기

bash 쉘에는 두 가지 환경 변수의 유형이 있다. 전역 변수와 지역 변수 두 가지이다.

전역 환경 변수

전역 환경 변수는 쉘 세션 및 그로부터 파생된 자식 서브쉘에서 사용할 수 있다.

전역 환경 변수를 보려면 env 또는 printenv 명령을 사용한다. 시스템 환경 변수는 모두 대문자를 사용한다.

지역 환경 변수

지역 환경 변수는 그 변수를 정의한 지역 프로세스에서만 볼 수 있다.

set 명령을 통해 특정 프로세스에 대한 모든 변수를 표시하고, 지역 및 전역 환경 변수와

사용자 정의 변수를 알 수 있다. 즉, env 명령을 써서 표시되는 변수에 지역 환경 변수 및

사용자 정의 환경 변수가 표시되는 것이다.

 

사용자 정의 변수 설정하기

사용자 정의 지역변수 설정하기

my_var=hello
echo $my_var
my_var="hello world"
echo $my_var

위에서 사용자가 정의한 지역 변수는 쉘 프로세스 어디서든 사용할 수 있지만 다른 쉘에서는 사용할 수 없다.

다른 쉘에서도 사용하기 위해서는 전역 환경 변수로 지정한다.

 

 전역 환경변수 설정하기

my_var="Hello World!"
export my_var
echo my_var
bash
echo my_var
exit
echo $my_var

export 명령으로 지역 변수를 전역 환경으로 내보낼 수 있다.

 

환경 변수 제거하기

unset 명령을 통해 기존 환경변수를 제거할 수 있다.

전역 환경 변수를 자식 프로세스에서 unset 한다면 이는 자식 프로세스에만 적용됨을 유의해야 한다.

 

PATH 환경 변수 설정하기

CLI에서 외부 명령을 입력하면 쉘은 프로그램을 찾기 위해 시스템을 검색해야 한다.
PATH 환경 변수는 명령과 프로그램을 검색하는 디렉토리를 정의한다.

echo $PATH
# 현재 디렉토리 포함
PATH=$PATH:.
echo $PATH

 

다만 시스템을 나가거나 재부팅할시 PATH 변수에 대한 변경 사항은 반영되지 않는다.

환경 변수에 대한 변경 사항을 영구적으로 만드는 방법은 따로 있다.

시스템 환경 변수 찾기

bash 쉘은 세 가지 방법으로 실행된다.

1. 로그인 할 때 기본 로그인 쉘

2. 서브쉘을 생성함으로써 실행되는 대화형 쉘

3. 스크립트를 실행시키기 위한 비대화형 쉘

로그인 쉘 프로세스 이해하기

리눅스 시스템에 로그인하면 bash 쉘은 로그인 쉘로 실행된다. 로그인 쉘은 보통 아래

다섯 개의 파일을 찾아서 이로부터 명령을 실행하려고 한다.

- /etc/profile

- $HOME/.bash_profile

- $HOME/.bashrc

- $HOME/.bash_login

- $HOME/.profile

/etc/profile은 bash 쉘의 주요 기본 시작 파일이다. 리눅스 배포판에서는 대부분

/etc/profile.d에 있는 쉘 스크립트를 실행한다.

나머지 네 개의 시동 파일은 모두 같은 기능을 위해 사용되는데, 사용자에 특정한 환경 변수를

정의하기 위한 사용자 특정 시동 파일을 제공하기 위한 것이다.

대화형 쉘 프로세스 이해하기

시스템에 로그인하지 않고 bash 쉘을 시작했다면 대화형 쉘이라고 하는 것이 시작된다.

/etc/profile 파일을 처리하진 않고 HOME 디렉토리의 .bashrc 파일을 확인한다.

비대화형 쉘 프로세스 이해하기

시스템이 쉘 스크립트를 실행할 수 있는 쉘이다. echo $BASH_ENV로 비대화형 쉘

프로세스용 시동 파일 이름을 확인할 수 있다. 기본적으로는 설정되어있지 않다.

그렇다면 쉘 스크립트는 어떻게 이 환경 변수를 사용할 수 있을까?

서브쉘을 실행하는 쉘 스크립트는 부모 쉘의 변수를 상속한다.

환경 변수를 영구적으로 만들기

1. /etc/profile.d에 .sh로 끝나는 파일을 만들고 수정한 전역 환경 변수 설정을 배치한다.

2. $HOME/.bashrc 파일을 수정한다.

 

변수 배열 알아보기

환경 변수를 배열로 사용할 수 있다.

mytest=(one two three four five)
# one - 배열의 첫 번째 값만 나타남
echo $mytest
echo ${mytest[2]}
# 전체 표시
echo ${mytest[*]}
mytest[2]=seven
echo ${mytest[2]}
unset mytest