환경변수

환경변수는 쉘 스크립트나 프로그램 실행을 제어, 실행환경 설정하는데 사용된다.

지역 환경 변수

현재 쉘에만 적용되는 변수, 환경변수명 = 변수

전역 환경 변수

현재 쉘과 자식 쉘에 같이 적용되는 변수, exports 환경변수명 = 변수

환경 변수 해제

unset

환경 변수 확인법

echo, set, env

환경 변수 파일 적용

$ source test_sh_var

대표적인 환경변수로 아래와 같다.

  • HOME : 사용자 홈 디렉토리

  • PATH : 실행파일 탐색 경로

  • LANG : 기본 언어

  • PWD : 사용자 현재 작업 디렉토리

  • TERM : 터미널 타입

  • SHELL : 로그인 쉘

  • BASH : bash 쉘 경로

  • PS1, PS2 : shell prompt 변수

대표적인 환경 변수

환경변수설명
HOME,PATH홈, 경로
$PS1command prompt
$PS2추가적인 입력을 받을 때 사용하는 prompt
$IFSinput field seperator.
$#쉘 스크립트에 전달되는 파라미터 수
$0쉘 스크립트 이름
1,2, $3첫번째, 두번째, 세번째 파라미터
$$쉘 스크립트의 Process Id
$*스크립트의 모든 파라미터를 1개 변수로 표현
$@IFS를 사용하지 않고 $*로 출력한 것
$ IFS=''
$ set foo bar bam
$ echo "$@"
foo bar bam
$ echo "$*"
foobarbam
$ unset IFS
$ echo "$*"
foo bar bam

IFS를 활용한 예제이다.

getenv(), putenv(), environ 변수

#include <stdlib.h>
 
char * getenv(const char * name);
int putenv(const char * string);
 
#include <stdlib.h>
extern char ** environ;

getenv는 환경변수에 설정된 값을 반환한다.

putenv는 "변수명=변수값" 형태의 문자열을 받아 생성한다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(int argc, int * argv[]) {
  char * var, * value;
 
  if(argc == 1 || argc > 3) {
    fprintf(stderr, "usage: environ var [value]\n");
    exit(1);
  }
 
  var = argv[1];
  value = getenv(argv[1]);
 
  if(value) {
    printf("Variable %s has value %s\n", var, value);
  }
 
  if(argc == 3) {
    char * string;
    value = argv[2];
    string = malloc(strlen(var) + strlen(value) + 2);
 
    if(!string) {
      fprintf(stderr, "out of memory\n"); exit(1);
    }
 
    strcpy(string, var);
    strcat(string, "=");
    strcat(string, value);
 
    printf("Calling putenv with : %s\n", string);
    if(putenv(string) != 0) {
      fprintf(stderr, "put env failed\n"); free(string); exit(1);
    }
    value = getenv(var);
    if(value) printf("New value of %s is %s\n", var, value);
  }
 
  exit(0);
}

putenv를 활용하기 위해 배열에 "변수명=변수값" 형식으로 저장함을 확인할 수 있다.

#include <stdio.h>
#include <stdlib.h>
 
int main() {
  char * homedir, filename[80];
  FILE * fp;
 
  homedir = getenv("HOME");
  strcpy(filename, homedir);
  strcat(filename, "/test.log");
 
  if((fp = fopen(filename, "w")) == NULL) {
    perror("fopen");
    exit(1);
  }
 
  fwrite("getenv test\n", 12, 1, fp);
  fclose(fp);
 
  return 0;
}

위 예제는 getenv를 통해 HOME 환경변수에 대한 정보를 얻어 경로 조작 후 파일을 생성하는 예제이다.

#include <stdlib.h>
#include <stdio.h>
 
extern char ** environ;
 
int main() {
  char ** env = environ;
 
  while(*env) {
    printf("%s\n", *env);
    env++;
  }
 
  exit(0);
}

environ 변수를 사용해 환경변수와 그 설정값들을 ""변수=값" 형태의 문자열로 저장된 문자열 배열을 가져온다. extern을 사용해 외부 파일에서 참조가 가능하게 해줘야 한다. 실행 결과는 env 명령어를 준 결과와 동일하게 나타난다.

'Operator System > Linux' 카테고리의 다른 글

쉘 프로그래밍 간단한 문법  (0) 2017.10.26
프로세스와 생성방법  (0) 2017.10.26
Make  (0) 2017.10.26
파일  (0) 2017.10.26
Compile과 라이브러리  (0) 2017.10.26

+ Recent posts