더 발전된 쉘 3

신준우·2023년 6월 7일
0

시스템 프로그래밍

목록 보기
12/12

이전 내용 복습

  • Built-in, 즉 미리 설정된 명령어들을 사용할 수 있게 발전시켰었다!

  • 이번에는 personalized settings, 즉 사용자의 개인 설정을 만들어보자

  • 이전 포스트에서는 또 전역변수와 로컬변수를 설정해서, Built-in을 사용가능케 했다.

환경변수

  • Unix/Linux는 environment라는 변수들의 집합에 설정을 저장한다
    - 각 user들은 각각의 홈 디렉토리, username, file, terminal type, favorite editor등이 많다
    - pterm, xterm: X 윈도우 시스템의 터미널 에뮬레이터다
    - 많은 개인 설정들이 "environment variables"즉 환경변수에 저장되어있다
    • 설정들은 편의를 위해 설정을 활용하는 스크립트가 실행될때 꺼내어져 사용될 수 있다

환경변수를 사용하는 방법

  • 자신의 환경 변수를 정리하는 명령여: env
  • 환경 변수를 할당하는법
    - var = value
    - export: 새로운 변수에 값을 할당할때 사용할 수 있는 built-in 명령어
    - "export var=value" 이런식으로 사용 가능하다
  • 환경 변수를 읽어오는법
    - getenv: C언어의 라이브러리 함수에 들어가있다

밑의 예시를 확인해보자

  • 그래서 환경변수가 뭐고, 어떻게 작동하는걸까?
    - 환경변수란, 문자열에 대한 포인터의 배열이다

    이것처럼 말이다

환경변수를 보는 법

Showenv.c

#include <stdio.h>
#include <unistd.h>

extern char** environ;		//외부에 정의된 environ 변수를 사용하기 위한 선언
							//environ은 현재 환경 변수에 대한 정보를 포함하는 전역 변수이다
int main(){		
		for(int i = 0; environ[i]; i++){		//environ배열을 순회, 환경 변수 출력
        		printf("%s\n", environ[i];
        }
}

결과값

changeenv.c

#include <stdio.h>
#include <unistd.h>
extern char** environ;
int main(){
		char* table[3];		//table
        
        table[0] = "TERM = vt100";		//출력할 값
        table[1] = "HOME=/on/the/range";		//경로를 보여줌
        table[2] = 0;		//문자열의 종료를 나타냄
        environ = table;		//
        execlp("env", "env", NULL);		//프로그램 실행 부분
}

결과값

새로운 쉘 만들기!

환경변수

#include "varlib.h"

void setup(){
		extern char** environ;		//environ변수 사용
        VLenviron2table(environ);
        signal(SIGINT, SIG_IGN);
        signal(SIGQUIT, SIG_IGN);
}

총정리

  • 쉘은 프로그램을 실행시킨다, 쉘스크립트라고 불린다.
  • 쉘 스크립트는 프로그램을 실행시키고, user입력을 받고, 변수를 사용하고, 다양한 함수를 갖는다
  • 쉘 안의 if...then 로직은 프로그램이 성공을 나타내기 위해, 종료값을 0으로 반환하는 관례가 있다
    - 쉘은 wait을 사용해서 프로그램으로부터 종료 상태를 얻는다
  • 쉘 프로그래밍 언어는 변수들을 포함한다
    - 이런 변수들은 문자열을 저장한다
    - 이런 변수들은 여러가지 명령어들에서 사용된다
    - 쉘 변수들은 스크립트 내에서 local로 사용된다
  • 모든 프로그램은 호출된 프로세스로부터 전역 변수라고 불리는 문자열 목록을 상속받는다
    - 전역변수는 global settings와 parameters를 설정하는데 사용된다
  • 쉘은 전역변수를 보고, 수정할 수 있도록 허용해준다
profile
보안

0개의 댓글