쉘 스크립트와 쉘 변수 다루기

2021. 1. 23. 14:29·TEAM STUDY/LINUX
728x90
반응형

스크립트

  • 인터프리터라 불리는 다른 프로그램에 의해 실행되는 프로그램
  • 자바 스크립트, Perl, 파이썬 등이 있음
  • 최종사용자가 응용 프로그램의 동작을 사용자의 요구에 맞게 수행할 수 있도록 해줌
  • 스크립트 언어라고도 하며 응용 프로그램과 독립하여 사용

 

셸 스크립트

  • 셸이 실행하는 프로그램
  • 유닉스 명령 + 셸이 제공하는 프로그램 구성 요소
  • 셸 스크립트 파일 이름은 키워드나 에일리어스, 내장 명령과 같은 이름을 쓰지 않는 것이 바람직함

 

쉘 명령 실행 순서

  1. 에일리어스
  2. 키워드(if, while, until 등)
  3. 함수
  4. 내장 명령(cd, echo 등)
  5. 스크립트, 유틸리티 등 PATH 경로에 있는 실행 가능한 파일

 

스크립트

 

 

 

  • exit [종료상태]
    • 스크립트의 종료 
    • 쉘 스크립트 문서이 끝
    • 기능: 종료 상태를 $? 변수에 저장

  • 파일의 마지막 명령을 실행
  • exit 문 실행

 

셸 스크립트 구성요소

  • #!
    • 파일의 가장 처음에 위치
    • 스크립트를 실행할 프로그램 지정

  • 각 셸마다 제공하는 스크립트 언어의 문법이 조금씩 다르므로, 이 스크립트를 실행할 셸을 지정해 주어야 올바로 실행됨
  • 셸이 아닌, 다른 실행 가능한 명령을 지정해 주어도 됨

 

  • #
    • 주석 ( Comment )
    • 프로그램에 대한 설명
    • 행 전체, 또는 행의 일부를 주석으로 처리할 수 있음

 

  • 셀 명령
    • 셀이 실행할 수 있는 모든 명령어 실행 가능
    • 여러 명령을 반복 수행해야 할 때 스크립트 파일로 저장하여 실행

 

  • 셸 프로그램
    • 각 셀이 제공하는 프로그램을 위한 구문
    • 셀 변수, 인자처리, 각종 연산자, 제어문 등 포함

 

셀 프로그래밍 절차

  1. $ touch shell_script_practice.sh      // 파일 생성
  2. $ vim shell_script_practice.sh         // 파일 편집기로 파일 열기
  3. 스크립트 상단에 #!/bin/bash 추가
  4. 내용 입력 후 저장하고 빠져나옴
  5. $ chmod +x shell_script_practice.sh // 실행 권한 부여
  6. $ ./shell_script_practice.sh             // 스크립트 파일 실행

 

쉘 변수

단일 변수

  • 쉘 변수는 대소문자를 구분함
  • =를 이용해서 선언하고 $ 를 이용해서 사용
  • {} 는 parameter substitution 으로 $와 함께 감싼 부분에 변수를 대입
  • "" 로 감싸서 사용하면 더 안전 ( 문자열에도 공백도 포함해서 값을 이용할 수 있기 때문에 )
  • =는 공백 없이 붙혀서 써야한다.
  • 지역 변수에는 local 을 붙힌다.
  • 변수명 앞에 export를 붙혀주면 환경변수로 설정되어 자식 스크립트에서 사용 가능
  • 환경 변수 사용 시, 예약 변수에 주의 필요
  • 환경 변수 정의 : .bash_profil 에서 정의

 

변수 타입 지정

  • Bash 변수는 타입을 구분하지 않고 기본적으로 문자열 문맥에 따라서 연산 처리
  • declare , typeset 타입 지정 명령 지원
  • 코멘트에 있는 다른 문법 사용을 추천
  • 옵션
    • -a
      • 변수를 배열로 취급
    • -f
      • 함수명과 정의 목록 출력
    • -F
      • 함수명 목록만 출력
    • -i
      • 정수형 타입 변수 만들기
    • -r
      • 읽기 전용 변수 만들기
    • -x
      • 서브 쉘에 변수명을 전달

 

쉘변수

예약변수

  • HOME
    • 사용자의 홈 디렉터리
  • PATH
    • 실행 파일을  찾는 경로
  • LANG
    • 프로그램 사용 시 기본 지원되는 언어
  • PWD
    • 사용자의 현재 작업중인 디렉토리
  • FUNCNAME
    • 현재 함수 이름
  • SECONDS
    • 스크립트가 실행된 초 단위 시간
  • SHLVL
    • 쉘 레벨 ( 중첩된 깊이를 나타냄 )
  • SHELL
    • 로그인해서 사용하는 쉘
  • PPID
    • 부모 프로세스의 PID
  • BASH
    • BASH 실행 파일 경로
  • BASH_ENV
    • 스크립트 실행 시 BASH 시작 파일을 읽을 위치 변수
  • BASH_VERSION
    • 스크립트 실행시 BASH 시작 파일을 읽을 위치 변수
  • BASH_VERSINFO
    • 스크립트 실행시 BASH 시작 파일을 읽을 위치 변수
  • MAIL
    • 메일 보관 경로
  • MAIL CHECK
    • 메일 확인 시간
  • OSTYPE
    • 운영체제 종류
  • TERM
    • 로긴 터미널 타입
  • HOSTNAME
    • 호스트 이름
  • HOSTTYPE
    • 시스템 하드웨어 종류
  • MACHTYPE
    • 머신 종류
  • LOGNAME
    • 로그인 이름
  • UID
    • 로그인 이름
  • EUID
    • 사용자 ID
  • USER
    • 사용자의 이름
  • USERNAME
    • 사용자 이름
  • GROUPS
    • 사용자 그룹
  • HISTFILE
    • history 파일 경로
  • HISTFILESIZE
    • history 파일 크기
  • HISTSIZE
    • history 저장되는 개수
  • HISTCONTROL
    • 중복되는 명령에 대한 기록 유무
  • DISPLAY
    • 디스플레이 이름
  • IFS
    • 입력 필드 구분자 ( 기본값 : -빈칸 )
  • VISUAL
    • VUSUAL 편집기 이름
  • EDITOR
    • 기본 편집기 이름
  • COLUMMS
    • 현재 터미널이나 윈도우 터미널의 컬럼 수
  • LINES
    • 터미널의 라인 수
  • LS_COLORS
    • ls 명령의 색상 관련 옵션
  • PS1
    • 기본 프롬프트 변수
  • PS2
    • 보조 프롬프트 변수
  • PS3
    • 쉘 스크립트에서 select 사용시 프롬프트 변수
  • PS4
    • 쉘 스크립트 디버깅 모드의 프롬프트 변수
  • TMOUT
    • 0이면 제한이 없으며 time 시간 지정 시 지정한 시간 이후 로그아웃

 

 

 

 

 

 

 

728x90
반응형
저작자표시 (새창열림)

'TEAM STUDY > LINUX' 카테고리의 다른 글

mkdir: cannot create directory 에러  (0) 2021.12.18
crontab 설정 기록  (0) 2021.07.23
유닉스 쉘 익히기  (0) 2021.01.16
유닉스 쉘의 기능과 종류  (0) 2021.01.16
유닉스 쉘의 기능과 종류  (0) 2021.01.16
'TEAM STUDY/LINUX' 카테고리의 다른 글
  • mkdir: cannot create directory 에러
  • crontab 설정 기록
  • 유닉스 쉘 익히기
  • 유닉스 쉘의 기능과 종류
Binsoo
Binsoo
내 트러블 슈팅
  • Binsoo
    정수빈 기술블로그임.
    Binsoo
  • 전체
    오늘
    어제
    • 빈수 개발자 개발 일기 (949)
      • 개발중 (635)
        • Spring Boot (95)
        • Spring Security (2)
        • Spring Batch (6)
        • Spring Boot & Redis (13)
        • Java Persistence API (JPA) (28)
        • Web (42)
        • Rest Api (7)
        • Spring Concurrency Control (3)
        • Redis (8)
        • Kubernetes (k8s) (4)
        • MYSQL (35)
        • AirFlow (15)
        • Docker (2)
        • Git (22)
        • Linux (9)
        • JSON Web Tokens (JWT) (4)
        • Troubleshooting (88)
        • Swagger (0)
        • Vue.js (52)
        • Java (74)
        • html (12)
        • C (5)
        • jQuery (15)
        • JavaServer Pages (JSP) (17)
        • Arduino (1)
        • JavaScript (35)
        • Amazon Web Services (AWS) (11)
        • Algorithm (9)
        • 참고 기능 (18)
        • mongo (2)
      • PROJECT (27)
        • 스프링부트+JPA+몽고 API 개발 (3)
        • MINI (2)
        • 게시판 (3)
        • vue 프로젝트 (1)
        • JPA 사이드 프로젝트 기록 (17)
      • TEAM STUDY (156)
        • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (8)
        • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (12)
        • NAVER DEVELOPER (4)
        • LINUX (23)
        • PYTHON (19)
        • SERVER (8)
        • 알고리즘 코딩 테스트 스터디 (31)
        • 쿠버네티스 (40)
        • 대세는 쿠버네티스 [초급~중급] (11)
      • BOOK (0)
      • 자격증 (61)
        • 리눅스 1급 - 필기 기록 (19)
        • 네트워크 관리사 (2)
        • 네트워크 관리사 2급 - 실기 기록 (21)
        • 네트워크 관리사 2급 - 필기 기록 (16)
        • 정보처리 (2)
      • 직장인 대학원 (28)
        • 기록 (3)
        • 캐글 스터디 (3)
        • R (12)
        • MLOps (10)
      • 논문 (5)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스프링
    jpa
    쿠버네티스 스터디
    java
    파이썬 알고리즘
    springboot
    네트워크 관리사 자격증
    리눅스 마스터
    리눅스 1급 요약
    리눅스 마스터 1급 요약
    Git 저장소
    쿠버네티스
    알고리즘
    네트워크 관리사
    리눅스 마스터 1급
    네트워크 관리사 2급 실기
    네트워크 관리사 요약
    docker
    네트워크 관리사 실기
    VUE
    git
    리눅스 마스터 1급 정리
    네트워크 관리사 학점
    REST API
    redis
    파이썬
    리눅스 마스터 요약
    Spring
    BackendDevelopment
    네트워크 관리사 2급
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Binsoo
쉘 스크립트와 쉘 변수 다루기
상단으로

티스토리툴바