Linux/기본

셸 스크립트 프로그래밍

no-na 2026. 6. 17. 22:35

셸의 기본

  • 사용자가 입력한 명령을 해석해 커널에 전달하거나 커널의 처리 결과를 사용자에게 전달하는 역할을 한다.

 

Rocky Linux의 bash

  • Rocky Linux에서 기본적으로 제공하는 셸은 bash(Bourne Again SHell) 이다.
  • Bash는 Bourne Shell(sh)을 기반으로 Korn Shell(ksh)과 C Shell(csh)의 좋은 점을 합한 셸이다.
  • bash의 특징
    • Alias 기능(명령어 단축 기능)
    • History 기능
    • 연산 기능
    • Job Control 기능
    • 자동 이름 완성 기능(tab)
    • 프롬프트 제어 기능
    • 명령 편집 기능

※ alias는 긴 명령을 단축하는 명령이다.
     예) 'ls al' 을 'ls2' 라는 명령으로 줄여서 하용하고 싶다면 alias ls2="ls -al" 명령을 실행하면 된다.

 

셸의 명령문 처리 방법

  • 셸 명령문은 명령문과 함께 여러 가지 옵션이나 인자(Argument)를 사용할 수 있다.
  • 명령문 형식
    • (프롬프트) 명령어 [옵션...] [인자...]

 

환경 변수

  • 설정된 환경 변수는 echo $환경변수 형식으로 명령을 실행해 확인할 수 있다.
  • bash의 주요한 환경 변수
환경 변수 설명 환경 변수 설명
HOME 현재 사용자의 홈 디렉터리 PATH 실행 파일을 찾는 디렉터리 경로
LANG 기본 지원되는 언어 PWD 사용자의 현재 작업 디렉터리
TERM 로그인 터널 타입 SHELL 로그인해서 사용하는 셸
USER 현재 사용자의 이름 DISPLAY X 디스플레이 이름
COLUMNS 현재 터미널의 컬럼 수 LINES 현재 터미널 라인 수
PS1 1차 명령 프롬프트 변수 PS2 2차 명령 프롬프트(대개는 '>')
BASH bash 셸의 경로 BASH_VERSION bash 버전
HISTFILE 히스토리 파일 경로 HISTSIZE 히스토리 파일에 저장되는 개수
HOSTNAME 호스트의 이름 USERNAME 현재 사용자 이름
LONGNAME 로그인 이름 LS_COLORS 'ls' 명령어의 확장자 색상 옵션
MAIL 메일을 보관하는 경로 OSTYPE 운영체제 타입

 

  • 환경 변수값을 변경하려면 export 환경변수=값 형식으로 명령을 실행한다.
  • 그 외 환경 변수는 printenv 명령을 실행해서 확인할 수 있다. (일부는 없음)

 

셸 스크립트 프로그래밍

  • 리눅스의 셰르 스크립트 문법은 C 언어의 문법과 유사하다.
  • 별도로 컴파일하지 않고 텍스트 파일 형태로 셸에서 바로 실행할 수 있다.

 

셸 스크립트 작성과 실행

 

[소스 설명]

  • 1행: 특별한 형태의 주석(#!)으로 bash를 사용하겠다는 의미다. 첫 행에 꼭 써줘야 한다.
  • 2~3행: echo는 화면에 출력하는 명령이다.
    먼저 "사용자 이름: "이라는 글자를 출력하고, 옆에는 $USER라는 환경 변수의 내용을 출력한다
  • 4행: 종료 코드를 반환하게 해 준다. (0은 성공을 의미한다.)

셸 실행

  1. sh 명령으로 실행
    • sh 스크립트파일 명령을 입력해 셸 스크립트를 실행할 수 있다.
  2. '실행 가능' 속성으로 변경 후 실행
    • 셸 스크릭트 파일의 속성을 '실행 가능'으로 변경한 후 ./스크립트파일 명령을 입력해 셸 스크립트를 실행할 수 있다.
    • chmod +x 파일명 명령은 현재 파일의 속성에 '실행 가능' 속성을 추가하라는 의미
    • ./name.sh 에서 앞에 '.'은 현재 디렉터리를 의미한다.

모든 사용자가 셸 스크립트를 사용할 수 있게 설정하는 방법

  • 위 셸 스크립트를 다른 사용자도 사용하게 하려면 /usr/local/bin/ 디렉터리에 복사하고 권한을 755로 변경하면 된다.

 


변수

  • 셸 스크립트에서는 변수를 사용하기 전에 미리 선언하지 않으며 처음 변수에 값이 할당될 때 자동으로 변수가 생성된다.
  • 변수에 저장하는 모든 값은 문자열(String)로 취급한다. 즉, 숫자를 넣어도 문자로 취급한다.
  • 변수 이름은 대소문자를 구분한다.
  • 변수를 대입할 때 사용하는 '=' 앞뒤에 공백이 없어야 한다.

 

 

변수의 입력과 출력

  • $ 문자가 들어간 글자를 출력하려면 ''로 묶거나 \를 붙여야 한다.
  • ""로 변수를 묶어도 묶지 않아도 된다.
  • 셸 스크립트

 

  • 셸 스크립트 실행 결과

 

숫자 계산

  • 변수에 저장한 값으로 연산하려면 expr 키워드를 사용한다.
  • `(역따옴표)로 묶어야 한다.
  • 괄호를 사용하려면 \(역슬래시)를 붙여야 한다.
  • +,-,/와 달리 * 기호는 예외적으로 \(역슬래시)를 붙여야 한다.
  • 셸 스크립트

  • 셸 스크립트 실행 결과

 

파라미터 변수

  • 파라미터(Parameter, 인자) 변수는 $0, $1, $2 등의 형태를 갖는다.
  • dnf -y install gftp 명령을 실행한다고 가정할 때 파라미터 변수는 다음과 같다
    명령 dnf -y install  gttp
    파라미터 변수 $0 $1 $2 $3
  • 전체 파라미터 변수는 $* 로 표현한다
  • 실행 셸 스크립트 

 

  • 셸 스크립트 실행 결과

 

if문과 case문

  • 기본 if문
if [ 조건 ]
then
	참일 경우 실행
fi
  • 실행 셸 스크립트

  • 셸 스크립트 실행 결과

 

  • if~else문
if [ 조건 ]
then
    참일 경우 실행
else
    거짓인 경우 실행
fi
  • 실행 셸 스크립트

  • 셸 스크립트 실행 결과

 

조건문에 들어가는 비교 연산자

  • 문자열 비교 연산자
문자열 비교 결과
"문자열1"="문자열2" 같으면 참
"문지얄1"!="문자열2" 다르면 참
-n "문자열" 문자열이 NULL(빈 문자열)이 아니면 참
-z "문자열" 문자열이 NULL(빈 문자열)이면 참

 

  • 산술 비교 연산자
산술 비교 결과
수식1 -eq 수식2 두 수식이 같으면 참
수식1 -ne 수식2 두 수식이 다르면 참
수식1 -gt 수식2 수식1이 크다면 참
수식1 -ge 수식2 수식1이 크거나 같으면 참
수식 -lt 수식2 수식1이 작으면 참
수식1 -le 수식2 수식1이 작거나 같으면 참
!수식 수식이 거짓이라면 참
  • 실행 셸 스크립트

  • 셸 스크립트 실행 결과

 

파일과 관련된 조건

파일 조건 결과
-d 파일이름 파일이 디렉터리면 참
-e  파일이름 파일이 존재하면 참
-f  파일이름 파일이 일반 파일이면 참
-g  파일이름 파일에 set-group-id가 설정되면 참
-r  파일이름 파일이 읽기 가능 상태이면 참
-s  파일이름 파일 크기가 0이 아니면 참
-u  파일이름 파일에 set-user-id가 설정되면 참
-w  파일이름 파일이 쓰기 가능 상태이면 참
-x  파일이름 파일이 실행 가능 상태이면 참
  • 실행 셸 스크립트

  • fname 파일이 일반 파일이면 5행을 불러와라
  • 셸 스크립트 실행 결과

  • 불러온 파일 내용

 

case~esac문

  • if 문은 참과 거짓으로 '이중 분기'라 한다.
  • case문은 여러 가지 경우의 수가 있어 '다중 분기'라 한다.
  • 실행 셸 스크립트1

  • 셸 스크립트 실행 결과1

 


  • 실행 셸 스크립트2

  • 셸 스크립트 실행 결과2

 

AND, OR 관계연산자

  • and-a 또는 &&를, or-o 또는 ||를 사용해 표현할 수 있다.
  • 셸 스크립트

  • -f: 일반 파일인지/ -s: 크기가 0이 아닌지
  • 셸 스크립트 실행 결과

 

반복문

for~in문

  • 기본 문법
for 변수 in 값1 값2 값3 ...
do
    반복할 문장
done

 

  • 실행 셸 스크립트1

  • 셸 스크립트 실행 결과1

 

  • 실행 셸 스크립트2

  • 셸 스크립트 실행 결과2

  • 셸 스크립트 불러온 목록

 

while문

  • 실행 셸 스크립트1

  • 셸 스크립트 실행 결과1
  • 무한반복으로 [Ctrl] + [C] 으로 정지한다.

 

  • 실행 셸 스크립트2

  • 셸 스크립트 실행 결과2

 

  • 실행 셸 스크립트3

  • 셸 스크립트 실행 결과3

 

break, continue, exit, return

  • 실행 셸 스크립트

 

  • 셸 스크립트 실행 결과

 

기타

사용자 정의 함수

  • 사용자가 직접 함수를 작성하고 호출할 수 있다.
  • 기본 형식
함수이름 () {  -> 함수를 정의
	내용들...
}
함수이름    -> 함수를 호출
  • 실행 셸 스크립트

  • 셸 스크립트 실행 결과

 

함수 파라미터 사용

  • 기본 형식
함수이름 () {    -> 함수를 정의
	$1, $2... 등을 사용
}
함수이름 파라미터1 파라미터2 ... -> 함수를 호출

 

  • 실행 셸 스크립트

  • 셸 스크립트 실행 결과

 

eval

  • 문자열을 명령문으로 인식하고 실행한다.
  • 실행 셸 스크립트

  • 셸 스크립트 실행 결과

 

export

  • 특정 변수를 외부 변수로 선언한다. 
  • 선언한 변수를 다른 프로그램에서도 사용할 수 있게 한다.
  • 실행 셸 스크립트

  • 셸 스크립트 실행 결과
    • export 외부 변수로 선언한 값만 사용가능

 

printf

  • C 언어의 printf() 함수와 비슷하게 지정한 형식에 맞게 문자를 출력한다.
  • 실행 셸 스크립트

  • 셸 스크립트 실행 결과

 

set과 $(명령)

  • 리눅스 명령을 결과로 사용하려면 '$(명령)' 형식을 사용해야 한다.
  • 결과를 파라미터로 사용하려면 set 명령과 함께 사용해야 한다.
  • 실행 셸 스크립트

  • 셸 스크립트 실행 결과

 

shitf

  • 파라미터 변수를 왼쪽으로 한 단계씩 쉬프트(이동) 시킨다.
  • 실행 셸 스크립트

  • 셸 스크립스 실행 결과

 

 

'Linux > 기본' 카테고리의 다른 글

Linux 네임 서버 설치 및 운영  (0) 2026.06.30
Linux 원격지 시스템 관리  (0) 2026.06.23
Linux 사용자별 공간 할당  (0) 2026.06.17
Linux RAID에 Rocky Linux 설치  (0) 2026.06.17
Linux LVM  (0) 2026.06.16