본문 바로가기
개발자 일지/Linux

[리눅스 기초]쉘 스크립트(Shell Script) 개념 및 사용법, 컴파일 언어와 인터프리터 언어의 차이점

by 네빌링 2021. 3. 14.
반응형

-리눅스의 쉘 스크립트에 대해 알아본다.

-생활코딩의 리눅스 강의를 바탕으로 학습 및 보충 학습하였다.

-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파일을 만든다.

 

 

ls -l로 만든 파일들을 확인

다시 ./backup을 실행해본 후 cd bak으로 이동하여 ls -l명령어로 카피된 log파일들을 확인한다.

 

 

 

 

위와 같이 bak폴더에 log들이 카피된 것을 확인할 수 있다.

 

출처 : newtypedev.tistory.com/15

 

 

 

반응형