100===Dev Ops/Bash

🚀 Bash 스크립트, 아직도 복붙만 하시나요?

블로글러 2024. 5. 28. 22:47
     _       __     __                             __
    | |     / /__  / /________  ____ ___  ___     / /_____
    | | /| / / _ \/ / ___/ __ \/ __ `__ \/ _ \   / __/ __ \
    | |/ |/ /  __/ / /__/ /_/ / / / / / /  __/  / /_/ /_/ /
    |__/|__/\___/_/\___/\____/_/ /_/ /_/\___/   \__/\____/

 

매번 똑같은 서버 배포 명령어, 손으로 일일이 치기 지겨우셨죠? 혹은 수많은 로그 파일 속에서 특정 문자열을 찾기 위해 몇 분씩 허비한 경험, 다들 한 번쯤 있으실 겁니다. 만약 이 모든 반복 작업을 파일 하나로 만들어 단 한 줄의 명령어로 끝낼 수 있다면 어떨까요?

이 글을 다 읽고 나면, 당신도 지루한 반복 작업을 자동화하는 멋진 Bash 스크립트를 작성할 수 있게 될 겁니다.

 

TL;DR

  • Bash 스크립트는 리눅스/macOS에서 반복적인 명령어를 자동화하는 파일입니다[1][9].
  • 파일 생성, 권한 부여(chmod), 실행의 3단계만 알면 바로 시작할 수 있습니다[1][8].

목차

  1. 배경: Bash 스크립트, 왜 써야 할까?
  2. 핵심 개념 정리
  3. 실습: 나만의 스크립트 만들기
  4. 모범 사례 (Best Practice)
  5. 마치며 & 참고자료

1. 배경: Bash 스크립트, 왜 써야 할까?

Bash 스크립트는 리눅스나 macOS 같은 유닉스 계열 운영체제의 기본 셸(Shell)인 Bash에서 사용하는 명령어 모음집입니다[1][9]. 간단히 말해, 터미널에 입력하는 여러 명령어들을 텍스트 파일에 미리 작성해두고 필요할 때마다 한 번에 실행하는 것입니다[4][14].

 

서버 관리, 파일 정리, 프로그램 빌드 및 배포 등 귀찮고 반복적인 작업을 자동화하여 시간을 절약하고 실수를 줄이는 데 매우 효과적입니다[5][7][9].

 

핵심 용어 정리

  • 셸(Shell): 사용자가 입력한 명령을 해석해 운영체제(커널)에 전달하는 인터페이스 프로그램입니다[7].
  • Bash(Bourne Again Shell): 수많은 셸 종류 중 하나로, 대부분의 리눅스 배포판과 macOS의 기본 셸로 채택되어 있습니다[1][9][13].
  • 셸 스크립트(Shell Script): 셸에서 실행할 명령어들을 순서대로 적어놓은 텍스트 파일입니다[4][14]. 확장자는 보통 .sh를 사용합니다[9][11].
  • 셔뱅(Shebang): 스크립트 파일 첫 줄에 작성하는 #!/bin/bash 구문. 이 스크립트를 어떤 인터프리터로 실행할지 지정합니다[1][6].

2. 핵심 개념 정리

Bash 스크립트는 여러 개의 리눅스 명령어를 파일 하나에 담아 순차적으로 실행하는 자동화 도구입니다[4][5][14].

 

가장 기본적인 형태는 변수를 선언하고 echo 명령어로 출력하는 것입니다.

#!/bin/bash

# 변수를 선언합니다. 등호(=) 앞뒤에 공백이 없어야 합니다.
GREETING="Hello, Velog!"

# 변수를 사용할 때는 앞에 $를 붙입니다.
echo $GREETING

# 출력: Hello, Velog!

3. 실습: 나만의 스크립트 만들기

사용자 이름을 인자(argument)로 받아 환영 메시지를 출력하는 간단한 스크립트를 만들어 보겠습니다.

① 파일 생성 및 권한 부여

먼저 hello.sh라는 파일을 생성하고 아래 내용을 작성하세요.

#!/bin/bash

# 스크립트에 전달된 첫 번째 인자를 NAME 변수에 저장합니다.
# $1은 첫 번째 인자, $2는 두 번째 인자를 의미합니다[6, 10].
NAME=$1

echo "안녕하세요, $NAME 님!"

 

이제 터미널에서 chmod 명령어로 스크립트에 실행 권한을 부여해야 합니다. 이 과정을 거치지 않으면 스크립트를 직접 실행할 수 없습니다[1][4][8].

# chmod +x [파일명] : 파일에 실행 권한(eXecutable)을 추가(+)
$ chmod +x hello.sh

② 스크립트 실행 및 테스트

실행 권한을 부여했다면 이제 스크립트를 실행할 차례입니다. ./는 '현재 디렉토리'를 의미하며, 현재 디렉토리에 있는 hello.sh를 실행하라는 뜻입니다[1].

# 스크립트 실행. '개발자'라는 단어를 인자로 전달합니다.
$ ./hello.sh 개발자

# 예상 출력 결과
안녕하세요, 개발자 님!

 

인자를 바꿔서 다시 실행해 보세요.

$ ./hello.sh Velog

# 예상 출력 결과
안녕하세요, Velog 님!

③ 조건문으로 기능 확장하기

만약 사용자가 인자를 입력하지 않으면 어떻게 될까요? "안녕하세요, 님!"이라는 어색한 메시지가 출력될 겁니다. if 조건문을 사용해 인자가 없을 경우 사용법을 안내하도록 코드를 개선해 봅시다[6][9].

hello.sh 파일을 다음과 같이 수정하세요.

#!/bin/bash

# $#은 스크립트에 전달된 인자의 개수를 의미합니다[6, 10].
# -eq 0 은 0과 같은지 비교하는 조건입니다(equal).
if [ $# -eq 0 ]; then
    echo "사용법: $0 [이름]"
    echo "예시: $0 개발자"
    exit 1 # 스크립트 비정상 종료
fi

NAME=$1
echo "안녕하세요, $NAME 님!"

 

이제 인자 없이 실행하면 친절한 안내 메시지가 나옵니다.

$ ./hello.sh

# 예상 출력 결과
사용법: ./hello.sh [이름]
예시: ./hello.sh 개발자

4. 모범 사례 (Best Practice)

안정적이고 예측 가능한 스크립트를 작성하기 위한 몇 가지 팁입니다.

패턴 장점 주의점
변수 사용 시 큰따옴표("")로 감싸기 echo "$NAME" 띄어쓰기나 특수문자가 포함된 변수 값으로 인한 오류를 방지합니다[9]. 큰따옴표 안에서는 $`
명령 치환은 $(command) 사용하기 TODAY=$(date) 백틱(`command`)보다 가독성이 좋고, 중첩해서 사용하기 편리합니다[3][6]. 아주 오래된 셸에서는 호환되지 않을 수 있지만, 대부분의 최신 Bash 환경에서는 표준입니다.
셔뱅은 #!/usr/bin/env bash 사용하기 시스템마다 다른 bash 경로를 자동으로 찾아주어 스크립트의 이식성이 높아집니다[1][6]. /bin/bash로 경로가 고정된 시스템보다 미세하게 느릴 수 있으나, 대부분의 경우 차이를 느끼기 어렵습니다.

5. 마치며

이번 글을 통해 Bash 스크립트의 기본 개념부터 간단한 실습까지 진행해 보았습니다.

  • 배운 점:
    1. 스크립트 생성, 권한 부여(chmod), 실행의 기본 흐름을 알게 되었다.
    2. 변수, 인자($1, $#), 조건문(if)을 활용해 동적인 스크립트를 만들 수 있게 되었다.
    3. 변수를 큰따옴표로 감싸는 등 안정성을 높이는 작은 습관의 중요성을 깨달았다.

실제 프로젝트 적용 팁: 가장 먼저, 매일같이 수동으로 실행하는 백업 명령어 혹은 테스트 서버 실행 명령어를 스크립트로 만들어 보세요. 작은 성공이 자동화의 재미를 붙여줄 겁니다.

 

이 글이 도움이 되셨다면 ❤️와 댓글 부탁드립니다! 여러분의 작은 응원이 더 좋은 글을 쓰는 데 큰 힘이 됩니다.


참고자료

[1] https://blog.gaerae.com/2015/01/bash-hello-world.html
[2] https://www.w3schools.com/bash/bash_script.php
[3] https://velog.io/@pingping95/Bash-Shell-Script-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90
[4] https://metaverse-cloud.tistory.com/138
[5] https://linuxconfig.org/how-to-write-a-bash-script-to-run-commands
[6] https://linuxconfig.org/bash-scripting-cheat-sheet
[7] https://monovm.com/blog/what-is-bash-scripting/
[8] https://ioflood.com/blog/run-bash-script/
[9] https://codedamn.com/news/programming/bash-scripting-101-writing-and-using-bash-scripts
[10] https://docs.csc.fi/support/tutorials/env-guide/linux-bash-scripts/
[11] https://jaeyoon-95.tistory.com/250
[12] https://inpa.tistory.com/entry/LINUX-%EC%89%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%95%B5%EC%8B%AC-%EB%AC%B8%EB%B2%95-%EC%B4%9D%EC%A0%95%EB%A6%AC
[13] https://losskatsu.github.io/os-kernel/bash/
[14] https://ko.wikipedia.org/wiki/%EC%85%B8_%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8
[15] https://developers.redhat.com/cheat-sheets/bash-shell-cheat-sheet
[16] https://www.gnu.org/software/bash/manual/html_node/Shell-Scripts.html

728x90
반응형