개인/리눅스

[리눅스] 기본 간단 쉘프로그래밍 작성 및 실행방법

OmeGa2 2020. 1. 29. 18:23

쉘 (shell) 프로그래밍이란?

쉘에서 여러 개의 동일한 명령을 반복적으로 실행해야 하는 경우,

매번 같은 명령을 치는 번거로운 막일 작업의 경우 한두 번은 괜찮지만 반복적으로

매일 같은 작업을 하는 경우 시간적으로도, 일적으로도 너무 비효율적입니다.

 

따라서, 하나의 파일을 만들어 그 안에 반복되는 여러 명령어를 적어놓은 뒤

파일을 실행했을 때 명령어들이 자동으로 실행되도록

만드는 과정을 우리는 "쉘 프로그래밍"이라고 합니다.

또한 이런 파일이나 프로그램을 주로 "스크립트"라고 부릅니다.

 

 

 

간단한 쉘 프로그래밍 작성방법

쉘 프로그래밍을 위해 파일을 생성할 경우 어떤 언어로 작성할지에 따라

파일의 확장자나 내용의 형식이 바뀌기도 합니다.

그중 가장 기본적으로 사용되는 bash쉘을 이용해서 간단한 프로그램

작성해 보려고 합니다.

 

 

]# vi test.sh

일단 명령어가 들어갈 파일을 하나 만들어야 합니다.

vi 편집기나 touch 등을 이용해 파일을 하나 생성합니다.

bash쉘일 경우 파일의 확장자를. sh로 생성합니다.

 

 

#!/bin/bash

파일의 첫번째 줄에 bash쉘을 사용한다고 명시해야 합니다.

bash의 절대경로를 이용해 작성합니다.

파이썬 같은 다른 언어를 사용할 경우 해당 언어의 절대 경로를 사용합니다.

 

echo "shell programming"

두 번째 줄부터는 실행할 명령어를 나열합니다.

명령행에서 실행하는 것과 동일하게 나열하면 됩니다.

현재는 파일 실행 시 shell programming라는 문자가 나오도록

내용을 작성해 보겠습니다.

 

 

]# chmod 755 test.sh

파일 작성을 완료했다면 vi편집기를 빠져나와 만들어놓은 파일에

실행 권한을 부여합니다. 이후 파일의 색이 초록색으로 바뀌게 됩니다.

이렇게 만들어진 파일을 "쉘 스크립트"라고 합니다.

 

 

 

 

 

 

쉘 스크립트(파일) 실행방법

사용할 명령어를 모아놓은 쉘 스크립트를 실행하는 방법에는 여러 가지가 있습니다.

일반적으로 chmod 명령을 통해 사용권한을 부여한 뒤 실행하는 방법과,

권한을 부여하지 않고도 실행할 수 있는 방법이 있습니다.

또한, 환경변수 PATH에 등록한다면 일반 명령어처럼 사용할 수도 있습니다.

 

1. 권한 부여 후 실행

파일을 작성한 뒤 파일에 "chmod 755 <파일명>" 명령을 통해 실행권한을 부여합니다.

이후 "./<파일명>" 명령으로 실행할 수 있습니다.

 

파일에 권한 부여 후 실행하는 방법

파일에 권한을 부여하는 chmod 명령을 실행한 뒤 파일의 이름 색깔이

초록색으로 바뀐 것을 확인할 수가 있습니다.

이후 "./test.sh" 명령을 통해 실행한다면 정상적으로 이루어집니다.

 

 

 

2. 권한없이 실행

bash 쉘을 이용한 스크립트의 경우 확장자가. sh입니다.

파일을 실행할 때 "sh <파일명>"으로 실행한다면 권한 없이

바로 파일을 실행할 수 있습니다.

만약 파이썬의 경우 "python <파일명>"으로 실행합니다.

 

권한 없이 실행

chmod 명령으로 권한을 부여하지 않고도 파일을 실행하는 방법입니다.

확장자가. sh인 bash쉘 스크립트라면 "sh <파일명>"으로 실행하더라도

문제없이 정상적으로 실행되는 것을 볼 수 있습니다.

 

 

 

 

 

3. 환경변수 PATH에 등록 후 실행

env 명령으로 볼 수 있는 환경변수 중 하나인 PATH에 파일의 경로를

추가한다면 위치에 상관없이 "ls , pwd"같은 명령처럼 아무데서나

사용할 수 있습니다. 이렇게 만들기 위해서는 1번 방법과 같이 권한을 부여한 뒤

"echo $PATH" 명령을 통해 볼 수 있는 환경변수 뒤에 경로를 추가합니다.

 

경로를 추가할 때는 export 명령을 사용하며 만약 경로가 "/tmp/user/" 라면

"export PATH=$PATH:/tmp/user/"형식으로 사용합니다.

 

환경변수 PATH에 등록 후 실행

파일이 있는 위치를 환경변수 중 하나인 PATH에 등록해서 일반 명령어처럼

사용하는 방법입니다. 환경변수를 등록할 때는 export 명령을 사용하며

"export PATH=<경로>" 명령으로 설정할 수 있습니다.

 

위처럼 "export PATH=$PATH:/tmp/shell/" 명령을 사용한 이유는 기존의 환경변수를

"$PATH"로 불러들인 후 그 뒤에 /tmp/shell/ 경로를 추가하기 위해 사용했습니다.

여기서 각 경로를 구분하기 위해 " : " 기호를 사용합니다.

따라서 새로운 경로를 추가하기 위해서는 "export PATH=$PATH:[경로]" 명령을 사용합니다.

 

경로가 추가되고 난 후 /tmp/shell 안에 있는 모든 파일은 다른 위치에서도

일반 명령어처럼 사용할 수 있습니다.

(다만, 이 방법은 재부팅 시에 초기화됩니다.)

 

 

 

쉘 프로그래밍 기본 문법

일반적인 프로그래밍 언어인 C언어나 파이썬도 언어마다

같은 for문을 사용하더라도 조금 다른 특징과 문법을 가지고 있듯이

쉘 프로그래밍에서도 일반적인 언어처럼 프로그램 작성이 가능하지만 

비슷하면서도 조금은 다른 문법을 가지고 있습니다.

 

▶주석

프로그램의 기능과는 별도로 설명을 돕기 위해 사용되는 주석은

쉘 프로그래밍에서는 # 을 사용합니다.

행의 맨 앞에 #이 있으면 뒷줄은 프로그램의 실행에

아무런 영향을 끼치지 않습니다.

 

 

▶변수

모든 프로그래밍 언어에서 가장 기본이 되는 변수는

특정 데이터를 저장하는 공간으로 사용합니다. 

쉘에서는 C언어와는 다르게 문자열만 변수로 사용 가능하며

변수를 사용하기 전에 변수형 선언을 할 필요가 없습니다.

(perl, python도 마찬가지)

 

 

▶변수 사용 시 주의사항

변수를 사용하고 싶다면 선언과 동시에 변수에 데이터를 대입해서 사용하면 됩니다.

변수사용 : user=test

user라는 이름의 변수를 선언함과 동시에 user에는 test라는 값이 들어가 있습니다.

"echo $<변수명>" 명령은 해당 변수에 들어있는 값을 출력합니다.

따라서, "echo $user"명령을 사용할 경우 "test"라는 값이 출력됩니다.

 

변수에 "="기호를 사용해서 값을 대입할 경우 공백이 있으면 안 됩니다.

ex) user = test (사용불가)

변수명은 특수문자나 숫자로 시작하면 성립되지 않습니다.

ex) 1 user=test (사용불가)

 

 

변수 사용 예시

num 변수를 선언과 동시에 10이라는 값을 대입했습니다.

echo에서 " " (큰따옴표)로 묶은 공간은 문자로 취급합니다.

여기서 변수를 쓰기 위해서는 ${변수명} 형식을 사용해야 합니다.

 

스크립트를 실행했을 때 "${num}"이라는 문자가 아닌,

num 변수의 값으로 불러들이는 것을 확인할 수 있습니다.

 

 

아규먼트 (Argument) 변수

위치 매개변수라고도 불리는 아규먼트 변수는 스크립트 파일을

실행할 때 같이 매개변수를 기입하면서 구분은 공백으로 합니다.

실행되는 스크립트 파일은 0번째 아규먼트가 되며 이후 공백을 기준으로

첫번째, 두 번째 아규먼트 변수가 되어 스크립트로 넘겨집니다.

 

 

아규먼트 변수의 사용

test.sh라는 이름의 파일을 실행하면서 매개변수 4개(A, B, C, D)를 공백으로

구분해서 실행했습니다. 이 때 파일명은 0번째 변수이며

A는 첫 번째, B는 두 번째 위치 매개변수가 되어

스크립트에서 불러와서 사용할 수 있습니다. 

 

아규먼트 변수는 스크립트 실행과 동시에 변수를 전달할 때

유용하게 사용할 수 있습니다.

 

$0 : 실행된 스크립트명             

$1 : 첫번째 아규먼트 변수         

$2 : 두번째 아규먼트 변수          

$# : 넘겨진 아규먼트 변수의 개수

$* : 전체 아규먼트 변수             

 

 

 

 

echo문과 이스케이프(escape)문자의 사용

echo는 보통 문자나 화면에 변수나 하나의 문자를 출력하기위한

명령으로 echo $<변수명> / echo "문자" / echo `명령어` 

등 여러가지 방법으로 사용할 수 있으며 2개의 옵션을 가지고 있습니다.

 

 

echo 옵션 사용 예시

echo 명령 자체에는 문자의 마지막에 개행이 포함되어 있습니다.

따라서 어떤 문자를 출력해도 개행이 추가적으로 출력되어 명령 프롬프트가

아래로 내려와 있는 것을 확인할 수 있었습니다.

 

echo -n 옵션은 자동으로 적용되는 개행을 생략하는 옵션입니다.

적용할 경우 문자 마지막에 나오는 개행을 생략해서

"AAA"문자 뒤에 바로 명령 프롬프트가 나오는 것을 확인할 수 있습니다.

 

 

 "echo -e <문자>" : -e옵션을 사용할 경우 다른 언어의 print 함수처럼

이스케이프 문자를 사용할 수 있습니다. 예를 들어

문자를 여러 행으로 구분해서 출력하고 싶을 때 개행을 적용하거나, 문자 사이의

공백을 위해 탭 거리만큼 띄워서 출력할 수 있습니다.

(대표적인 이스케이프 문자로는 "\n (개행)", "\t (탭)" 이 있습니다.)

 

 

echo -e : 이스케이프 문자의 사용

echo -n : 마지막 줄의 개행 제거