웹 개발은 대부분 리눅스 서버 환경에서 구축된다. 업무를 하며 배포나 메모리 체크 등 반복되는 작업에 대한 다양한 쉘 스크립트들이 작성된 것을 보았다. 자동화를 위해 쉘 스크립트를 공부할 필요를 느끼고 책도 샀다! 시작하기 전 가볍게 쉘 스크립트의 문법에 대한 기본 내용들을 정리한다.
[쉘 스크립트란?]
쉘 스크립트는 쉘이 수행하고 있는 명령어들을 저장하고 있는 파일이다. 쉘 스크립트를 제작하는 것을 쉘 프로그래밍이라 한다.
[변수]
- 위치 매개 변수 : 0 하나만 적는 것을 제외하고 숫자로 지시하는 매개 변수를 의미한다.
- 쉘 함수가 실행될 때 일시적으로 치환된다.
- 1개 이상의 숫자로 구성된 위치 매개 변수를 확장할 때에는 중괄호로 묶어 주어야 한다.
- 특별 매개 변수 : 이 매개변수는 참조만 가능할 뿐 값을 지정할 수는 없다. 앞에 $을 붙여서 사용한다.
- * : 전체 매개변수를 의미. 매개변수는 스페이스로 구분한다.
- @ : 전체 매개변수를 의미.""안에서 확장이 이루어질 때에는각 매개변수가 개별적인 단어로 확장한다.
- $* 와 $@의 차이점? https://stackoverflow.com/questions/21071943/difference-between-and-in-bash-script
- "$*" All the positional parameters (as a single word) *
- "$@" All the positional parameters (as separate strings)
- # : 십진수로 위치 매개변수의 수로 확장.
- ? : 최근에 실행된 포그라운드 파이프라인의 상태값으로 확장.
- - : 실행하자마자 쉘 자체에 의해 서정된 현재 옵션 플래그로 확장.
- $ : 쉘의 프로세스 ID로 확장한다. ()괄호는 서브쉘을 의미하는데 서브쉘에서는 서브쉘이 아닌 현재 쉘의 프로세스id로 확장한다.
- ! : 최근에 실행한 백그라운드 명령의 프로세스 id로 확장.
- 0 : 쉘 또는 쉘 스크립트의 이름으로 확장.
- 쉘 변수 : 쉘의 환경 변수로서 리눅스 자체에 의해 만들어지는 변수를 의미한다. 쉘의 환경을 설정하기 위함이다.
- env 명령에 의해 이 정보에 대해서 알 수 있다.
- 기본 설정값이 있지만 사용자에 의해 설정이 가능하다.
- 사용자 정의 변수 : 쉘에서 변수는 사전에 선언할 필요 없이 변수를 처음 사용할 때 만들게된다.
- 형태는 이름=[값]
- 일반적으로 변수는 문자열 형태로 저장된다.
- 대소문자를 구분한다.
- 첫 글자는 영숫자로 선언해야 한다(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 |