CS/OS

[Linux] 쉘 스크립트 기초 문법

창문닦이 2020. 5. 23. 18:33

웹 개발은 대부분 리눅스 서버 환경에서 구축된다. 업무를 하며 배포나 메모리 체크 등 반복되는 작업에 대한 다양한 쉘 스크립트들이 작성된 것을 보았다. 자동화를 위해 쉘 스크립트를 공부할 필요를 느끼고 책도 샀다! 시작하기 전 가볍게 쉘 스크립트의 문법에 대한 기본 내용들을 정리한다.

[쉘 스크립트란?]

쉘 스크립트는 쉘이 수행하고 있는 명령어들을 저장하고 있는 파일이다. 쉘 스크립트를 제작하는 것을 쉘 프로그래밍이라 한다.

 

[변수]

  1. 위치 매개 변수 : 0 하나만 적는 것을 제외하고 숫자로 지시하는 매개 변수를 의미한다.
    • 쉘 함수가 실행될 때 일시적으로 치환된다.
    • 1개 이상의 숫자로 구성된 위치 매개 변수를 확장할 때에는 중괄호로 묶어 주어야 한다.
  2. 특별 매개 변수 : 이 매개변수는 참조만 가능할 뿐 값을 지정할 수는 없다. 앞에 $을 붙여서 사용한다.
    • * : 전체 매개변수를 의미. 매개변수는 스페이스로 구분한다.
    • @ : 전체 매개변수를 의미.""안에서 확장이 이루어질 때에는각 매개변수가 개별적인 단어로 확장한다.
    • # : 십진수로 위치 매개변수의 수로 확장.
    • ? : 최근에 실행된 포그라운드 파이프라인의 상태값으로 확장.
    • - : 실행하자마자 쉘 자체에 의해 서정된 현재 옵션 플래그로 확장.
    • $ : 쉘의 프로세스 ID로 확장한다.  ()괄호는 서브쉘을 의미하는데 서브쉘에서는 서브쉘이 아닌 현재 쉘의 프로세스id로 확장한다.
    • ! : 최근에 실행한 백그라운드 명령의 프로세스 id로 확장.
    • 0 : 쉘 또는 쉘 스크립트의 이름으로 확장.
  3. 쉘 변수 : 쉘의 환경 변수로서 리눅스 자체에 의해 만들어지는 변수를 의미한다. 쉘의 환경을 설정하기 위함이다.
    • env 명령에 의해 이 정보에 대해서 알 수 있다.
    • 기본 설정값이 있지만 사용자에 의해 설정이 가능하다.
  4. 사용자 정의 변수 : 쉘에서 변수는 사전에 선언할 필요 없이 변수를 처음 사용할 때 만들게된다. 
    • 형태는 이름=[값]
    • 일반적으로 변수는 문자열 형태로 저장된다. 
    • 대소문자를 구분한다.
    • 첫 글자는 영숫자로 선언해야 한다(a-z, A-Z, 0-9)
    • 변수명에 길이는 제약이 없으나 너무 길게하는 것은 가독성이 좋지 않다. 지양하자.

[#!/bin/bash]

쉘 스크립트가 bash 로 실행된다는 것을 의미한다. 쉘 간의 오류를 방지하는 것이다. 

 

[복합 명령 - if, case, for, while, until, select 및 함수]

if 문

#!/bin/bash

if [조건식1]
then
	조건식1 결과가 참일때 수행할 명령문
elseif [조건식2]
then
	조건식2 결과가 참일때 수행할 명령문
else
	모든 조건식 결과가 거짓일때 수행할 명령문
fi

 

case 문

#!/bin/bash

case $변수 in
값1)
변수가 값1과 같을 경우 실행
;;
값2)
변수가 값2과 같을 경우 실행
;;
값3)
변수가 값3과 같을 경우 실행
;;
*)
해당사항이 아무것도 없을 경우 실행
;;
esac

 

for 문

#!/bin/bash

for {변수} in {반복하여 사용될 값들}
do
	반복해서 실행될 명령문
done

 

while 문

#!/bin/bash

while {조건문}
do
	반복해서 실행될 명령문
done

 

until 문

#!/bin/bash

until {조건문}
do
	조건문이 거짓일 동안에 반복해서 실행될 명령문
done

 

select 문

#!/bin/bash

select 변수 in 메뉴리스트 
do
	실행될 명령문
done

 

사용자 정의 함수

쉘에서도 함수를 생성할 수 있다. 함수의 문법은 다음과 같다. 특정 이름의 함수를 정의하고 해당 함수가 호출되면 명령문들이 실행된다. 쉘 스크립트에서 함수는 어떤 특뵬헌 묭룡울 통해 선언될 필요가 없다. 

// TODO 추후 작성 예정입니다.

 

 

'CS > OS' 카테고리의 다른 글

[OS] DMA  (0) 2021.06.20
[Linux] 프로세스  (0) 2020.05.23
[OS] 윈도우 부팅 디스크 버전 확인하기  (0) 2020.03.07
[OS] 운영체제 기초  (0) 2020.02.29
[Linux] 생활코딩 리눅스 강좌 (5)  (0) 2019.10.08