계속지나가기
코딩스뮤
계속지나가기
전체 방문자
오늘
어제
  • 코딩스뮤:)
    • Algorithm
      • 백준 문제풀이
      • 프로그래머스 문제풀이
      • 알고리즘 이론
      • 자료구조
      • SW Expert Academy
    • 인공지능(AI)
      • LLMs
      • 자연어처리(NLP)
      • 컴퓨터비전(CV)
      • 딥러닝(DL)
      • 머신러닝(ML)
      • 인공지능기초수학
      • 선형대수학
    • 컴퓨터 세팅
    • Computer Science
      • 유닉스프로그래밍
      • 프로그래밍언어론
      • 디자인패턴
      • 클린코드
      • SW 영어
      • 리눅스
      • 논리회로
    • Server
      • Docker

블로그 메뉴

  • 홈
  • Who Am I(CV)
  • 태그

공지사항

인기 글

태그

  • 비용함수
  • 비지도학습
  • DIP
  • 머신러닝
  • 알고리즘
  • 파이썬 클린코드
  • 네트워크플로우
  • f1-score
  • SIFT
  • DigitalImageProcessing
  • 기계학습
  • 손실함수
  • machinelearning
  • ComputerVision
  • 결정경계
  • 패턴인식
  • LM
  • 언어모델
  • 군집화
  • 경사하강법
  • 에지검출
  • 지도학습
  • 컴퓨터비전
  • MaximumFlow
  • networkflow
  • 디지털이미지처리
  • NLP
  • ML
  • 선형회귀
  • 최대유량

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
계속지나가기

코딩스뮤

[유닉스 이론과 실습] ch13. 배시쉘 프로그래밍
Computer Science/유닉스프로그래밍

[유닉스 이론과 실습] ch13. 배시쉘 프로그래밍

2020. 10. 18. 12:11
반응형

(본 강의 노트는 한빛 미디어의 <유닉스 이론과 실습> 책을 기반으로 하고 있습니다)

ch13. 배시쉘 프로그래밍

학습목표

  • 다양한 쉘 변수를 이해하고 활용하는 방법을 익힌다
  • 사용자로부터 입력을 받아 스크립트 파일에서 처리하는 방법을 익힌다
  • 다양한 연산자와 문자열 테스트, 파일 테스트를 활용하는 방법을 익힌다
  • 조건문과 반복문의 사용 방법을 익힌다
  • 함수를 이용해 스크립트를 작성하는 방법을 익힌다
  • 스크립트의 실행 오류를 찾아 수정하는 방법을 익힌다

목차

  1. 쉘 스크립트
  2. 쉘 변수 사용하기
  3. 사용자로부터 입력 받기
  4. 연산자
  5. 제어문
  6. 함수
  7. 디버깅

01. Shell 스크립트

스크립트

  • 인터프리터라 불리는 다른 프로그램에 의해 실행되는 프로그램
  • 자바스크립트, 파이썬

shell 스크립트란?

  • Shell이 실행하는 프로그램
  • 유닉스 명령 + Shell이 제공하는 프로그램 구성 요소
  • Shell 스크립트 파일 이름은 키워드나 앨리어스, 내장 명령과 같은 이름을 쓰지 않는 것이 바람직함
  • 명령 실행 순서
    : allias -> keyword -> function -> inner command(cd, echo and etc) -> 실행 가능한 파일

Shell 스크립트 만들기

: vi 에디터로 편집

Shell 스크립트 실행하기

  • Shell 을 실행하면서 인자로 스크립트 이름 지정
  • 파일을 직접 실행
  • 실행 방법
    • bash filename.sh / source filename.sh
    • chmod +x filename.sh ( change mode to executable) -> 이후 ./filename.sh로 실행 가능

Shell 스크립트 종료하기 : exit

  1. 스크립트의 종료
  • exit[n]
  1. 종료 상태를 $? 변수에 저장
  2. 스크립트가 종료되는 경우는?
  • 파일의 마지막 명령을 실행
  • exit 문 실행

스크립트 파일의 구성요소 : #!

  1. 매직넘버
  2. 파일의 가장 처음에 위치
  3. 스크립트를 실행할 프로그램 지정
  • 각 Shell마다 제공하는 스크립트 언어의 문법이 조금씩 다르므로, 이 스크립트를 실행할 Shell을 지정해주어야 올바로 실행됨
  • Shell이 아닌, 다른 실행 가능한 명령을 지정해주어도 됨

스크립트 파일의 구성요소 :

  1. 주석
  2. 프로그램에 대한 설명

스크립트 파일의 구성요소 : Shell 명령

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

스크립트 파일의 구성요소 : Shell 프로그램

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

02. Shell 변수 사용하기

변수란?

: 프로그램에서 처리하는 다양한 정보를 저장하는 곳

  1. 종류
  • Shell 변수(현재 Shell에서만 사용 가능)
  • 환경변수(모든 Shell에서 사용 가능)
  1. 지정 방법
  • 변수명 = 값
  1. 사용예제

Shell 변수 문자열 처리하기

  • 변수의 값이 문자열일 때 문자열 내 패턴을 찾아 일부분을 제거하는 표현식
  • 2.x 이전의 배시Shell에서는 동작하지 않음
  1. Shell 변수 문자열 처리 : %, #
  • 사용 예
    • % : 뒤에서부터 패턴과 일치하는 최소 부분을 제거(%%는 최대부분)
    • #: 앞에서부터 패턴과 일치하는 최소 부분을 제거(##은 최대부분)

명령행 인자 처리

  1. 명령행 인자
  • 스크립트를 실행할 떄 인자로 주어진 값
  1. 위치 매개 변수
  • 명령행 인자를 저장하는 스크립트 변수
  • 인자의 위치에 따라 이름이 정해짐

명령행 인자

의미

$0

쉘 스크립트의 이름

$1 - $9

명령행에 주어진 첫번째부터 9번째까지 인자

$(10)

10번째 인자

$#

전체 인자 개수

$*

모든 인자

$@

$*과 같은 의미

“$*”

“$1 $2 $3”

“$@"

“$1” “$2” “$3”

$?

최근 실행된 명령의 종료값

Shell 특수문자 및 명령 처리

  1. 인용 부호 : Shell 특수 문자의 의미를 없애기 위해 사용
  • ' ' : 모든 특수문자들이 해석되는 것을 막음
  • " " : 변수나 명령의 대체만 허용
  • \ : 단일 문자가 해석되는 것을 막음
  1. 명령 대체 : 명령 실행 결과를 문자열로 반환
  • 백쿼터(₩ ₩)
  • $(명령)

03. 사용자로부터 입력 받기

사용자로부터 직접 입력 : read

  1. Shell 내장 명령으로 터미널이나 파일로부터 입력 처리
  2. 사용 형식

형식

의미

read  x

표준입력에서 한 행을 입력 받아 x에 저장

read  first  last

표준입력에서 한 행을 입력받아 첫번째 단어를 first에 저장하고 나머지 모두를 last에 저장

read -p prompt

prompt를 출력하고 입력을 기다린다. 입력된 값은 REPLY 변수에 저장

here 문서를 통한 입력 : <<

  1. 표준 입력을 사용자로부터 직접 받아들이지 않고 자동 처리
  2. TERMINATOR가 입력될 때까지 기술된 부분을 키보드 입력으로 처리
  • 키보드 입력을 종료 문자로 사용되는 EOF문자를 파일 안에서 사용할 수 없기 떄문에 입력 종료를 나타내는 문자열을 지정하여 사용

04. 연산자

  1. 프로그램에서 자료를 처리하는 방법
  2. 산술 연산자, 비교 연산자, 논리 연산자, 비트 연산자 제공
  3. 수치 연산자 사용시 let 또는 (()) 를 사용해야 함

05. 제어문

  1. 프로그램내의 문장 실행 순서를 제어하는 것
  2. 선택적 실행문
  • 프로그램 실행문을 조건에 따라 선택적으로 실행
  • If, select
  1. 반복 실행문
  • 프로그램 실행문을 정해진 횟수나 조건에 따라 반복 실행
  • while, do, for

선택적 실행문 : if-then-else

: 주어진 조건의 참, 거짓 여부에 따라 명령 실행

선택적 실행문 : if-then-elif-else

: 주어진 조건의 참, 거짓 여부에 따라 명령 실행

조건 테스트 : 문자열 연산자

  1. 조건 명령에 사용하는 문자열 연산자
  2. 내장 명령 [ [ ] ] 사용

문자열연산자

동작

string = pattern

string == pattern

string이 pattern과 일치. = 연산자 양쪽에 공백

string != pattern

 string이 pattern과 일치하지 않음

string

 string이 널이 아님

-z string

 string의 길이가 0

-n string

 string의 길이가 0이 아님

-l string

string의 길이

조건 테스트 : 테스트 플래그

- 파일 관련 테스트

test 플래그

기능

-a file

파일이 존재

-e file

파일이 존재

-L file

심볼릭 링크 파일

-O file

사용자가 file의 소유자

-G file

파일의 그룹 ID가 스크립트의 그룹 ID와 같음

-S file

소켓 파일

test 플래그

기능

-r  file

읽기 가능

-w  file

쓰기 가능

-x  file

실행 가능

-b  file

블록 장치 특수 파일

-c  file

문자 장치 특수 파일

-d  file

디렉토리 파일

-p  file

파이프 파일

-u  file

setuid 권한 부여 파일

-g  file

setgid 권한 부여 파일

-k  file

sticky bit 접근 권한 부여 파일

-s  file

파일의 크기가 0이 아님

선택적 실행문 : case 문

  1. 주어진 변수의 값에 따라 실행할 명령 따로 지정
  2. 변수의 값이 value1이면, value1 부터 ;;을 만날 때까지 명령 실행
  3. 값의 지정에 특수기호, |(or operator) 사용 가능
  4. 일치하는 값이 없으면 기본값인 *부터 실행

반복 실행문 : for

  1. 리스트 안의 값들에 대해 지정한 명령을 순차 실행

반복 실행문 : while

  1. 조건 명령이 정상 실행되는 동안 명령 반복

반복 실행문 : until

  1. 조건 명령이 정상 실행될때까지 명령 반복

반복 실행문 : select

  1. 메뉴를 생성할 수 있는 반복 실행문
  2. list에 지정한 항목을 자동으로 선택 가능한 메뉴로 만들어 화면에 출력해줌
  3. 사용자는 각 항목에 자동 부여된 번호를 선택
  4. 사용자 입력은 select, in 사이에 지정된 변수에 저장
  5. 보통 case 문과 결합하여 입력 값 처리

루프 제어문 : continue

  1. 루프 안에서 사용
  2. 이후 실행 순서를 무시하고 루프의 처음으로 돌아가는 명령
  3. 숫자를 지정하면 중첩된 루프 안에서 특정 루프의 처음으로 돌아갈 수 있음

06. 함수

함수란?

하나의 목적으로 사용되는 명령들의 집합

앨리어스와의 차이점

  1. 조건에 따라 처리 가능
  2. 인자 처리 가능

함수의 종료 : return

  1. 함수 종료 조건
  • 함수 본문 안의 마지막 문장 실행
  • return 문 실행
  1. 반환값
  • 단, 리턴문으로 값을 반환시 최대 256까지의 값밖에 반환이 되지 않는다
  • 해결방법, 전역변수를 선언하여 전역변수에 함수안에서 계산한 값을 저장하고 return;해줌

함수 삭제 : unset

  1. 정의된 함수를 삭제
  2. unset -f 함수명

07. 디버깅

스크립트 실행 중 발생한 오류 수정 방법

구문 오류

  1. Shell이 실행 도중 구문오류가 발생한 라인번호 출력
  2. 실행 오류
  3. 오류 메시지 없이 실행이 안되거나 비정상 종료
  4. 오류 수정방법
  5. bash -x, trap

디버깅 : bash -x

  1. 가장 간단한 스크립트 실행 오류 수정방법
  2. 스크립트의 각 행이 실행될 때마다 화면에 출력됨
  3. 디버깅 시 유용한 듯
반응형

'Computer Science > 유닉스프로그래밍' 카테고리의 다른 글

[유닉스 시스템 프로그래밍] Ch04. 시스템 정보  (0) 2020.10.19
[유닉스 이론과 실습] ch06. 파일 접근 권한 관리하기  (0) 2020.10.19
[유닉스 이론과 실습] ch04. vi 사용법 익히기  (0) 2020.10.18
Introduction UNIX  (0) 2020.10.18
[유닉스 시스템 프로그래밍] Ch02. 파일 입출력  (0) 2020.09.27
    'Computer Science/유닉스프로그래밍' 카테고리의 다른 글
    • [유닉스 시스템 프로그래밍] Ch04. 시스템 정보
    • [유닉스 이론과 실습] ch06. 파일 접근 권한 관리하기
    • [유닉스 이론과 실습] ch04. vi 사용법 익히기
    • Introduction UNIX
    계속지나가기
    계속지나가기
    NLP Engineer

    티스토리툴바