DevOps

Shell 셸, 셸 스크립트

팅리엔 2021. 1. 30. 23:46

셸(Shell)은 사용자가 커널의 기능을 사용하도록 하기 위한 사용자 인터페이스이다.

쉘을 통하여 사용자는 쉽게 파일 관리, 프로세스 관리, 배치 프로세싱, 성능 모니터링, 환경 설정 등의 커널 기능을 사용할 수 있다.

 

sh, bash

sh (bourne shell)

1977년 스티븐 본이 개발. 유닉스 최초의 셸인 톰프슨 셸을 대체. 유닉스 버전 7의 기본 셸.

bash (bourne again shell)

1989년 브라이언 폭스가 개발. 리눅스에서 가장 많이 사용하는 셸. sh 명령어 문법과 호환된다.

명령 히스토리, 디렉토리 스택, 명령어 치환, 명령어 자동완성 기능 등을 제공한다.

 

셸 확인

현재 셸 확인
$ echo $SHELL
/bin/bash

시스템이 지원하는 셸 목록 확인
$ chsh -l
또는
$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

 

설정 파일

  설정 파일 설명
시스템 설정
(전역적)
/etc/profile 로그인 시 실행
/etc/profile.d/*.sh 와 /etc/profile.d/sh.local 실행
/etc/bashrc 셸 실행 시 실행
사용자 설정
(지역적)
~/.bash_profile
~/.bash_login
로그인 시 실행
로그인 - 로그아웃 때까지 유지된다.
개별 사용자마다 설정이 필요한 경우 이 파일에 기재한다.
설정이 변경되었을 때 source 명령어를 통해 즉시 반영이 가능하다.
($ . ~/.bash_profile 또는 $ source ~/bash_profile)
~/.profile 로그인 시 실행
주로 bash와 직접 관련이 없는 사항을 기재한다.
~/.bashrc 셸 실행 시 실행
주로 alias 설정이나 함수를 저장한다.
~/.bash_logout 로그인한 셸을 로그아웃할 시 실행
사용자 계정의 임시 파일을 제거하는 등의 사용자 관리 목적으로 사용할 수 있다.

 

셸 단축키

단축키 설명
Ctrl + L 화면을 모두 지움
Ctrl + A 줄의 맨 앞으로 이동
Ctrl + E 줄의 맨 끝으로 이동
Alt + B 왼쪽으로 한 단어 이동
Alt + F 오른쪽으로 한 단어 이동
Ctrl + Y 클립보드의 내용 붙여넣기

 

표준 입출력

리눅스 커널은 사용자의 입력을 프로그램에 전달하고, 프로그램의 결과를 사용자에게 출력하여 보여준다.

구분 약어 파일 디스크립터 설명
표준 입력 stdin 0 프로그램에게 데이터를 전달할 때 사용하는 기본 장치
표준 출력 stdout 1 프로그램의 출력을 표시한 기본 장치
표준 에러 stderr 2 프로그램에서 오류가 발생했을 때 출력할 기본 장치

e.g.

  • 프로그램의 에러를 무시할 경우
    $ some-command 2> /dev/null
  • 프로그램의 실행 결과와 에러를 모두 한 파일로 표준 출력을 재지정할 경우
    $ some-command > somefile 2>&1

 

셸 스크립트

셸에서 제공하는 여러 명령어들을 나열한 일종의 파일.

파일의 첫번째 줄에 '#!'을 통해 해당 스크립트가 사용할 셸을 명시한다. (#!/bin/bash)

 

셸 스크립트 실행하기

셸 스크립트는 현재 셸에서 바로 실행하거나 별도의 프로세스로 실행할 수 있는데, 별도의 프로세스로 실행하려면 스크립트 파일의 퍼미션에 실행 권한을 주어야 한다.

$ chmod +x hello.sh

셸은 환경변수 PATH에 지정된 경로에서만 실행 파일을 찾기 때문에 셸 스크립트를 실행할 때 현재 경로를 의미하는 './'를 붙여야 한다.

$ ./hello.sh

혹은 셸의 인자로 스크립트 파일 경로를 넘겨 실행할 수도 있다.

$ bash hello.sh

현재 셸에서 바로 실행하려면 source 명령어나 dot 명령어를 이용한다.

$ source hello.sh
$ . hello.sh

 

변수 선언하기

#!/bin/bash

name="My Name"

# 변수값 출력
echo "name=${name}"