본문 바로가기
리눅스,네트워크

리눅스 쉘 스크립트(Shell Script) 쉬운 설명

by 데이널 2023. 11. 7.

이번 포스팅에서는 리눅스에서 사용하는 쉘 스크립트에 대해 설명드리겠습니다. 리눅스는 보통 CLI 환경에서 다양한 작업을 수행합니다. 그러다 보니 여러 명령어를 반복 실행하거나 복잡한 작업을 자동화해야 할 경우가 발생합니다. 그 때 필요한 도구가 리눅스 쉘 스크립트라는 프로그램입니다. 이 글에서는 리눅스 쉘 스크립트의 기본 개념, 작성 방법, 실행 방법에 대한 예시를 들어 알아보겠습니다.

 

쉘 스크립트란?

Shell Script는 리눅스 운영 체제에서 사용되는 명령어와 프로그램을 시퀀스로 나열한 스크립트 파일입니다. 스크립트라고 부르는 것처럼 텍스트 파일로 작성합니다. 실행파일을 특별히 만들 필요없이 Script를 실행하면 파일에 포함된 명령어가 순차적으로 실행됩니다. 이런 방법으로 우리들은 복잡한 작업을 자동화하거나 반복된 작업을 간단하게 수행할 수 있습니다.

 

여기서 Shell이라는 것은 리눅스에서 User와 커널 간의 인터페이스 연할을 하는 소프트웨어입니다.(아래 그림 참조) 많이 들었던 Bash Shell, Z Shell, Korn Shell 등이 있다고 알고 있을 것입니다. 결국 Shell에서 구동되는 스크립트라는 의미라고 생각하면 되겠습니다. 
 

리눅스 쉘
리눅스 쉘

 

리눅스가 익숙하지 않다면 윈도우에서 batch(배치파일, .bat)와 비슷한 기능을 가지고 있습니다. bat 파일을 실행하면 프로그램이 자동으로 혼자 순서대로 실행됩니다. 윈도우의 bat 파일의 리눅스 버전이 바로 Shell script라고 대체해서 생각할 수 있습니다. 
 

기본 구성 요소

쉘 스크립트 안에 포함되어야 할 구성요소들입니다. 구성요소를 살펴보면 심플합니다. 실제로 다른 언어보다는 쉽게 해석할 수 있는 장점이 있습니다. 하지만 변수들의 해석이나 리눅스 명령어에 익숙하지 않는다면 가끔은 까다롭게 다가올 수도 있다고 생각합니다.  

  • Shebang(해시뱅) : 스크립트 파일의 첫 줄에 #!/bin/bash 또는 다른 쉘 인터프리터의 경로를 지정하여 스크립트를 실행할 쉘을 지정합니다. 해당 프로그램을 확인하려면 cd /bin에 가면 bash 실행파일이 있습니다. 
    • 실제 코드를 작성하기 전에 맨 처음의 행에는 #!/bin/sh를 사용
    • 해당 셸 스크립트가 bash쉘을 사용한다는 것을 알려주기 위함
    • 여라가지 쉘 프로그램이 존재함 (csh, zsh 등)
  • 주석(Comments) : # 기호로 시작하는 줄은 주석으로 처리됩니다. 스크립트의 설명이나 코드에 대한 설명을 기록하는 데 사용됩니다.
  • 변수(Variables) : 데이터를 저장하고 조작하기 위해 변수를 선언하고 사용합니다.
  • 제어 구조(Control Structures) : 조건문(If-else) 및 반복문(For, While)을 사용하여 특정 조건에 따라 작업을 제어합니다.
  • 명령어(Command) : 실행하려는 명령어 및 명령어에 전달할 매개 변수를 포함합니다.

 

쉘 스크립트 작성

쉘 스크립트 파일은 기본적으로 .sh 확장자로 작성하는 방법이 좋습니다. 사실 리눅스에서는 확장자라는 개념도 없고 의미도 없습니다. 하지만 다른 파일들과 구분되게 작성하는 것이 가독성에 좋습니다. 쉘 스크립트도 프로그램 언어기 때문에 if, while, for 문에 대한 문법이 있습니다. 개인적으로 이부분은 study를 해야합니다. 스크립트 작성을 위해 매개변수를 어떻게 표현하는지는 알아야 합니다. 매개변수는 $로 시작하고 숫자의 의미는 아래와 같습니다.   

  • $0 : 프로그램
  • $1 : 1번째 인자
  • $n : n번째 인자

이제 스크립트를 작성할 준비가 되었습니다. 아래 절차에 따라 직성해 보시기 바랍니다.

  1. 스크립트 목적 정의 : 무엇을 자동화하려는지 목적을 정의하고 어떤 명령어와 조건을 사용해야 할지 결정합니다.
  2. 스크립트 파일 생성 : 원하는 텍스트 편집기(예: nano, vim, 또는 gedit)를 사용하여 스크립트 파일을 생성하고 실행 권한을 부여합니다.
  3. 스크립트 작성 : 스크립트 파일에 목적에 따라 변수, 조건문, 반복문 및 명령어를 작성합니다.
  4. 디버깅 및 테스트 : 스크립트를 테스트하고 실행 중에 발생할 수 있는 오류를 확인하고 디버깅합니다.
  5. 실행 권한 설정 : chmod 명령어를 사용하여 스크립트 파일에 실행 권한을 부여합니다.
  6. 스크립트 실행 : 스크립트를 실행하고 작업이 예상대로 수행되는지 로그를 확인합니다. 

쉘 스크립트 실행

간단하게 쉘 스크립트를 작성해 보겠습니다. 쉘 스크립트의 목적은 해당 디렉토리에 첫번째 인자인 파일명이 있으면 "파일명 exist"를 출력하고, 없으면 "파일명 not exist"을 출력하는 프로그램입니다. 
 

1
2
3
4
5
6
#!/bin/bash
if [ -f $1 ]; then
        echo "$1 exist"
else 
        echo "$1 not exist"
fi
cs

 
Shell Script를 test.sh로 작성 후 실행하려면 해당 script가 있는 위치라면 아래와 같이 하시면 됩니다.

  • ./test.sh

그런데 생행 권한이 없는 경우가 있습니다. 권한 없이 실행하는 방법은 아래와 같습니다.

  • sh test.sh
  • bash test.sh

처음부터 실행 권한을 주고 실행하는 방법은 아래와 같습니다. 

  • chmod 755 test.sh
  • ./test.sh error.log

 

마무리

쉘은 몇개의 종류가 있으며, 각 특정 기능과 문법을 갖고 있습니다. 사용자는 자신의 필요와 선호에 따라 어떤 쉘을 선택하고 사용할지 결정할 수 있습니다. 기본적으로 Bash는 가장 널리 사용되며, 일반적인 리눅스 사용에는 충분합니다. 만약 특정 상황에서 다른 Shell이 필요하다면 사용할 수 있습니다.