Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

리눅스 셸의 이해와 기본 셸 스크립팅 입문 – 1부

백 마디 말보다 한 장의 그림이 더 많은 것을 말해 줍니다. 아래 그림은 리눅스(Linux)가 어떻게 작동하는지 한눈에 보여 줍니다.

 

리눅스 셸의 이해와 기본 셸 스크립팅 입문 – 1부

함께 읽으면 좋은 글

  1. 셸 프로그래밍을 배우는 5가지 셸 스크립트 – 2부
  2. 리눅스 BASH 스크립팅의 세계 탐험하기 – 3부

리눅스 셸 이해하기

  1. 셸(Shell): 사용자를 운영체제와 연결해 주는 명령줄 해석기(Command-Line Interpreter)로, 명령어를 직접 실행하거나 텍스트 스크립트를 작성해 작업을 수행할 수 있게 해 줍니다.
  2. 프로세스(Process): 사용자가 시스템에서 실행하는 모든 작업을 프로세스라고 합니다. 단순한 작업보다는 조금 더 복잡한 개념입니다.
  3. 파일(File): 하드 디스크(HDD)에 저장되며, 특정 사용자가 소유한 데이터를 담고 있는 존재입니다.
  4. X 윈도우(X-windows): 리눅스의 한 가지 작동 모드로, 화면(모니터)을 '윈도우'라고 불리는 여러 개의 작은 영역으로 나눌 수 있습니다. 이를 통해 사용자는 여러 작업을 동시에 수행하거나 작업 간에 손쉽게 전환할 수 있고, 그래픽도 깔끔하게 확인할 수 있습니다.
  5. 텍스트 터미널(Text Terminal): 텍스트만 표시할 수 있거나 아주 기본적인 수준의 그래픽만 지원하는 모니터입니다.
  6. 세션(Session): 시스템에 로그인한 시점부터 로그아웃하는 시점까지의 시간을 의미합니다.

표준 리눅스 배포판의 셸 종류

본 셸(Bourne Shell): 초기 버전에서 널리 사용된 주요 셸 중 하나로, 사실상의 표준(de facto standard)이 되었습니다. 벨 연구소(Bell Labs)의 스티븐 본(Stephen Bourne)이 개발했습니다. 모든 유닉스 계열 시스템에는 최소한 하나 이상의 본 셸 호환 셸이 존재합니다. 본 셸의 프로그램 이름은 "sh"이며, 일반적으로 파일 시스템 계층 구조에서 /bin/sh 경로에 위치합니다.

C 셸(C Shell): 빌 조이(Bill Joy)가 버클리 소프트웨어 배포판(Berkeley Software Distribution)을 위해 개발했습니다. 문법이 C 프로그래밍 언어를 본떠 만들어졌습니다. 주로 대화형 터미널 환경에서 사용되며, 스크립팅이나 운영체제 제어 용도로는 상대적으로 덜 활용됩니다. 다양한 대화형 명령어를 제공하는 것이 특징입니다.

본격적으로 시작해 볼까요! (리눅스 셸)

명령줄 사용자에게는 수천 가지 명령어가 존재합니다. 이것을 전부 외울 수 있을까요? 안타깝게도 불가능합니다. 컴퓨터의 진정한 힘은 작업을 쉽게 만드는 데 있습니다. 반복적인 과정을 자동화하려면 결국 스크립트가 필요합니다.

스크립트란 명령어들의 모음을 하나의 파일로 저장한 것입니다. 셸은 이 파일을 읽어 들여 마치 키보드로 직접 입력한 것처럼 명령어를 차례대로 실행합니다. 또한 셸은 스크립트를 진정으로 강력하게 만들어 주는 다양한 프로그래밍 기능도 함께 제공합니다.

셸 프로그래밍 기초

  1. 리눅스 셸을 사용하려면 먼저 터미널을 실행해야 합니다.
  2. 현재 사용 중인 셸을 확인하려면 echo $SHELL 명령어를 실행합니다.
  3. 리눅스에서 달러 기호($)는 셸 변수를 의미합니다.
  4. 'echo' 명령어는 입력한 내용을 그대로 화면에 출력합니다.
  5. 파이프(|)는 여러 명령어를 연결해서 사용할 때 매우 유용합니다.
  6. 리눅스 명령어에는 고유한 문법이 있으며, 잘못된 문법은 절대 용서하지 않습니다. 명령어를 잘못 입력해도 시스템이 손상되거나 무언가 망가지지는 않지만, 해당 명령어는 동작하지 않습니다.
  7. #!/bin/sh: '셔뱅(shebang)'이라고 부르며, 셸 스크립트 최상단에 작성하여 /bin/sh 프로그램에 지시를 전달하는 역할을 합니다.

셸 스크립트란?

셸 스크립트는 확장자가 ".sh"인 단순한 텍스트 파일로, 실행 권한(executable permission)만 부여되면 바로 사용할 수 있습니다.

스크립트 작성 및 실행 과정

  1. 터미널을 엽니다.
  2. 'cd' 명령어로 스크립트를 생성하고 싶은 위치로 이동합니다.
  3. cd (엔터) — 프롬프트가 홈 디렉터리로 이동합니다.
  4. touch hello.sh — hello라는 이름의 스크립트 파일을 생성합니다. '.sh' 확장자는 필수라는 점을 기억하세요.
  5. vi hello.sh (또는 nano hello.sh) — 선호하는 편집기를 사용해 스크립트를 작성·수정합니다.
  6. chmod 744 hello.sh — 스크립트에 실행 권한을 부여합니다.
  7. sh hello.sh 또는 ./hello.sh — 스크립트를 실행합니다.
첫 번째 스크립트 작성하기
#!/bin/bash
# My first script

echo "Hello World!"

위 코드를 텍스트 파일에 저장한 뒤, 실행 권한을 부여하고 앞서 설명한 방법으로 실행합니다.

실행 결과

Hello World!

위 코드의 구성 요소를 살펴보면 다음과 같습니다.

#!/bin/bash (셔뱅(shebang))
# My first script ('#' 뒤에 오는 모든 내용은 주석)
echo "Hello World!" (이 스크립트의 핵심 부분)
두 번째 스크립트 작성하기

이제 두 번째 스크립트로 넘어가 보겠습니다. 이 스크립트는 사용자의 "사용자명(username)"을 알려 주고, 현재 실행 중인 프로세스 목록을 출력해 줍니다.

#! /bin/bash
echo "Hello $USER"
echo "Hey i am" $USER "and will be telling you about the current processes"
echo "Running processes List"
ps

위 코드로 파일을 생성하고 원하는 이름으로 저장하되, 확장자는 반드시 ".sh"로 지정하세요. 실행 권한을 부여한 뒤 터미널에서 실행하면 됩니다.

실행 결과

Hello tecmint
Hey i am tecmint and will be telling you about the current processes
Running processes List
  PID TTY          TIME CMD
 1111 pts/0    00:00:00 bash
 1287 pts/0    00:00:00 sh
 1288 pts/0    00:00:00 ps

꽤 멋지지 않나요? 스크립트 작성은 아이디어를 떠올리고 파이프로 연결된 명령어를 작성하는 것만큼이나 간단합니다. 물론 몇 가지 제약도 존재합니다. 셸 스크립트는 간결한 파일 시스템 작업이나, 필터와 명령줄 도구들을 파이프로 조합하는 형태의 스크립팅에는 매우 뛰어난 성능을 발휘합니다.

반면 요구 사항이 더 높아진다면 — 예를 들어 기능성, 견고성, 성능, 효율성 같은 측면에서 — 더욱 완전한 기능을 갖춘 프로그래밍 언어로 전환하는 것이 좋습니다.

이미 C, Perl, Python 등 다른 프로그래밍 언어를 알고 있다면, 셸 스크립팅 언어를 배우는 일은 그리 어렵지 않을 것입니다.

세 번째 스크립트 작성하기

이번 글의 세 번째이자 마지막 스크립트입니다. 이 스크립트는 사용자와 상호작용하는 대화형(interactive) 스크립트입니다. 간단하지만 재미있는 이 스크립트를 직접 실행해 보고, 어떤 느낌이었는지 우리에게 알려 주세요.

#! /bin/bash
echo "Hey what's Your First Name?";
read a;
echo "welcome Mr./Mrs. $a, would you like to tell us, Your Last Name";
read b;
echo "Thanks Mr./Mrs. $a $b for telling us your name";
echo "*******************"
echo "Mr./Mrs. $b, it's time to say you good bye"

실행 결과

Hey what's Your First Name?
Avishek
welcome Mr./Mrs. Avishek, would you like to tell us, Your Last Name
Kumar
Thanks Mr./Mrs. Avishek Kumar for telling us your name
******************************************************
Mr./Mrs. Kumar, it's time to say you good bye

물론 이것이 끝은 아닙니다. 이번 글은 여러분께 스크립팅의 맛을 살짝 보여 드리는 데 목적이 있었습니다. 앞으로의 연재 글에서 이 끝없이 깊은 스크립팅 언어의 세계를 더욱 완벽하게 다룰 예정입니다. 댓글로 여러분의 소중한 생각을 남겨 주시고, 좋아요와 공유로 더 많은 분들에게 알려 주세요. 그때까지 편안히 쉬시면서, 계속 저희와 함께해 주세요!

함께 읽으면 좋은 글: 셸 프로그래밍을 배우는 5가지 셸 스크립트 – 2부