-리눅스의 쉘 스크립트에 대해 알아본다.
-생활코딩의 리눅스 강의를 바탕으로 학습 및 보충 학습하였다.
-ubuntu 12.10을 사용하였다.
쉘 스크립트란?
쉘 스크립트(Shell Script)는 쉘로 하는 프로그래밍이라고 볼 수 있다. Java나 C언어 처럼 조건문, 반복문 등의 일반적인 프로그래밍 문법을 사용할 수 있다. 그러나 컴파일 방식이 아닌 인터프리터를 통한 스크립트 방식이라는 차이점이 있다.
컴파일 언어와 인터프리터 언어의 차이점을 대충 알고 있어서 이 기회에 한 번 정리해본다.
컴파일 언어 | 스크립트 언어 |
컴파일러를 거쳐서 기계어로 번역한 후 한 번에 실행(번역 후 실행) | 인터프리터가 코드를 한줄 한줄 해석하며 실행(번역하며 실행) |
컴파일을 하기 위해 변수 선언 등의 제약사항이 많음 | 변수를 변수라고 선언하지도 않으며 해당 변수 자료형은 소스코드가 실행되는 순간임 |
코드 문법 등의 버그가 있으면 컴파일 자체가 안 됨 | 코드 실행 전까지 버그를 인지할 수 없기 때문에 오류 발견시점이 늦어짐(디버깅이 까다롭다) |
Java,C,C++ 등 | Java Script, Python 등 |
쉘 스크립트 작성하기
nano나 vim 편집기로 빈 파일을 만든 후 작성한다. 이후 필요할 때마다 사용할 수 있다. 다음 예시는 백업(bak)폴더가 있는지 없는지 체크 후, 없으면 생성후 파일들을 카피하는 스크립트 문법을 작성해본다.
우선 다음과 같이 testss 폴더를 만든 후 testss로 이동하여 nano backup 명령어로 빈 backup파일을 만든 후 편집기를 연다.
위의 빈 파일에 쉘 스크립트를 다음과 같이 작성한다.
문법에 대한 해석은 다음과 같다.
#!/bin/bash //bash프로그램에서 스크립트를 인식하게 한다는 초기 디폴트명령어
if ! [ -d bak ]; then //bak 디렉토리가 없으면
mkdir bak //bak 디렉토리를 만들고
fi //if문이 끝남을 표현
cp *.log bak //모든 log파일을 bak으로 카피
ctrl + o로 저장 후 ctrl + x로 빠져나온 후 ./backup이라고 입력해서 실행해본다. 실행하면 권한(Permission) 에러가 발생한다. 그렇기 때문에 chmod 명령어를 통해 권한을 준다.
위의 첫 번째 줄에서 ./backup을 실행하면 아래와 같이 Permission denied가 발생한다. ls -l backup으로 권한을 확인해보면 실행권한인 x(excutable)가 없는 것을 확인할 수 있다. 이를 위해 chmod +x backup으로 권한을 준다. 이후 ls -l backup을 보면 -rw-rw-r--에서 -rwxrwxr-x로 권한이 변경된 것을 확인할 수 있다.
이후 ./backup을 다시 실행해보자. 실행하면 쉘스크립트의 cp *.log bak 명령어로 인해 에러가 발생할 것이다. 카피할 *.log파일이 없기 때문이다. touch test{1..10}.log명령어를 통해 test1,test2...test10.log파일을 만든다.
다시 ./backup을 실행해본 후 cd bak으로 이동하여 ls -l명령어로 카피된 log파일들을 확인한다.
위와 같이 bak폴더에 log들이 카피된 것을 확인할 수 있다.
출처 : newtypedev.tistory.com/15
'개발자 일지 > Linux' 카테고리의 다른 글
[리눅스 기초]백그라운드, 포그라운드 프로세스 (0) | 2021.05.06 |
---|---|
[리눅스 기초]파일을 찾는 방법(location,find,whereis) (0) | 2021.05.04 |
[리눅스 기초]프로세스 확인하기(ps, top) (0) | 2021.05.03 |
[리눅스 기초]리눅스 디렉토리 구조 (0) | 2021.03.18 |
[리눅스 기초]I/O Redirection 개념 및 사용법 (1) | 2021.03.12 |
[리눅스 기초]CLI 개념 및 사용 이유, 다중명령어(세미콜론,파이프라인 등) (0) | 2021.03.09 |
[리눅스 기초]다운로드 방법 - wget, git clone (2) | 2021.03.07 |
[리눅스 기초]패키지 매니저(Package Manager) (0) | 2021.03.07 |