앎을 경계하기

[가짜연구소3기] Data Engineer

[가짜연구소 3기] 데이터 엔지니어링 51 - From command-Line to Bash Script

양갱맨 2021. 9. 28. 13:31

Bash란 무엇이고 왜 중요한가?

  • Bourne Again Shell에서 나온 단어
  • 80년대에 개발되었고, 유닉스 기반 시스템에서 매우 중요한 역할을 한다.
  • 명령을 하나 하나 복사해서 쓰지 않고 파일 하나로 구성해서 명령 수행을 할 수 있다.
  • Bash scripting을 하기 전, 이전에 배운 명령어들을 기억해야함
    • egrep 또는 grep : 정규식 패턴 매칭을 사용해 입력 내용을 필터링한다.
    • cat : 줄 단위로 사용할 파일 내용을 연다.
    • tail 또는 head : -n플래그를 사용하여 마지막 또는 맨 앞에서부터의 내용을 보여준다.
    • wc : -w, -l과 함께 사용하여 단어나 줄 수를 센다.
    • sed : 정규식 패턴 매칭을 사용하여 문자열 대체를 한다.

예제

  • fruits.txt
    banana
    apple
    carrot
    grep 'a' fruits.txtgrep 'p' fruits.txt[]를 사용하여 집합을 만들고 ^ 를 사용하면 제외하는 패턴을 찾을 수 있다.
    apple
    carrot
    줄이 많은 파일은 파이핑해서 정렬하고 고유한 데이터 카운트를 수행한다.
    cat new_fruits.txt | sort | uniq -c | head -n 3
    14 apple
    13 banana
    12 carrot
  • 상위 n개의 과일을 원하면 wc 명령에 -l 옵션을 사용하여 head 로 상위 데이터를 출력한다.
  • grep '[pc]' fruits.txt
  • apple
  • banana apple carrot

단어 여러개를 찾고 싶으면 다음과 같이 사용한다.

egrep 'Sydney Carton|Charles Darnay'

Bash Script 핵심

bash script는 대개 #!/usr/bash로 시작한다.

bash 위치를 확인할 때, which bash 를 사용하여 위치를 확인하고 일반적으로 /usr/bash를 사용한다.

일반적으로 배쉬파일의 확장자는 .sh 이다.

  • 예제(eg.sh)
    #!/usr/bash
    echo "Hello world"
    echo "Goodbye world"
    $ ./eg.sh
    Hello world
    Goodbye world
  • 예제
    • animals.txt
      magpie, bird
      emu, bird
      kangaroo, marsupial
      wallaby, marsupial
      shark, fish
    동물이 몇 마리인가?
    • group.sh
      #!/usr/bash
      cat animals.txt | cut -d " " -f 2 | sort | uniq -c
      $ ./group.sh
      2 bird
      1 fish
      2 marsupial

Standard streams & arguments

arguments는 스크립트에 입력되는 모든 인수를 의미한다.

$ 표시를 사용하여 인수에 접근한다.

모든 인수는 $@ 또는 $* 로 표현하고 인수의 길이(개수)는 $# 으로 표현한다.

  • 예제(args.sh)
    #!/usr/bash
    echo $1
    echo $2
    echo $@
    echo "There are " $# "arguments"
    $ bash args.sh one two three four five
    one
    two
    one two three four five
    There are 5 arguments