Saturday, March 16, 2019

Bash 쉘 프로그래밍 - 3. Bash 쉘 환경 #2. 변수 정의 및 호출

■ 변수란? (Variable)

변수는 변할 수 있는 값(수, 문자, 문자열)을 대표하는 문자입니다. 일반적인 컴퓨터 언어에서는 자료형(데이터 형식)에 따른 변수 선언 (정수, 실수, 문자열 같은)을 하는데 쉘에서 자료형을 잘 설정하지 않습니다. 다른 언어들도 다 그러하지만 쉘도 예약 변수와 일반 변수가 있으며 일반 변수에는 지역 변수와 환경 변수가 있습니다. 보통 변수 이름은 아래와 같이 대문자를 사용합니다.

[root@shell01 ~]# A=1

현재의 쉘(Shell)에서 A는 변수이며 변수에 1이란 값이 정의되었습니다. 변수의 값을 호출하기 위해 변수 앞에 $기호를 입력하면 됩니다

[root@shell01 ~]# echo $A
1

또는 아래와 같이 변수의 값을 판단하는 조건문에 아래와 같이 사용할 수도 있습니다.

[root@shell01 ~]# if [ $A -eq 1 ]; then echo "A Value is $A"; else "A Value is not 1"; fi
A Value is 1

■ 변수 정의 및 호출

변수를 정의하는 방법은 간단하다. '변수 이름=값' 이렇게 정의하면 되며 값을 숫자로 넣으면 숫자형, 문자로 넣으면 문자형이 된다.

[root@shell01 ~]# A=1
[root@shell01 ~]# NAME=Sunguru
[root@shell01 ~]# JOB='IT Manager'
[root@shell01 ~]# DATE=`date "+%Y-%m-%d %H:%M"`

그리고 아래와 같이 echo 명령을 통해 변수의 값을 호출할 수 있습니다.

[root@shell01 ~]# echo "TIME : $DATE
> Hello ${NAME}, ${A}.$JOB"
TIME : 2017-02-27 09:25
Hello Sunguru, 1.IT Manager

변수값을 호출할 때 변수 이름 뒤에 바로 뒤따르는 문자 또는 문자열이 있다면 변수 이름과 구분 짓기 위해 중괄호 {}를 사용할 수 있습니다. 변수값을 꼭 미리 정의하는 것이 아닌 명령의 결과 값으로 또는 사용자 입력을 통해 받을 수 있습니다. 위에서 date 명령의 결과값을 DATE 변수값으로 정의하였습니다.

사용자로부터 값을 받기 위해 read이라는 쉘의 내장 명령을 사용할 수 있습니다. read 명령 다음에는 사용자로부터 받은 값을 저장하기 위한 변수 이름을 정의합니다.

[root@shell01 ~]# read NAME
Edward
[root@shell01 ~]# echo $NAME
Edward

이렇게 하면 알아보기 힘들기 때문에 사용자에게 값을 입력 유도하는 문장을 출력한 후 값을 받기 위해 아래와 같이 쉘 스크립트 파일을 만들 수 있습니다.

[root@shell01 ~]# vi scripts/name.sh

#!/bin/bash
echo -n "Enter your name : "
read NAME
echo 
echo "Your name is $NAME."

그리고 스크립트 파일을 실행하기 위해 아래와 같은 명령을 사용할 수 있습니다. 실행 권한을 부여한 후 실행하여도 되고 bash 쉘을 실행하여 파일을 읽어들여 실행하게 만들 수도 있습니다.

[root@shell01 ~]# bash scripts/name.sh
Enter your name : Gilbert

Your name is Gilbert.

■ 쉘 스크립트 파일 실행

쉘과 쉘 스크립트 파일의 차이점은 앞에서 언급하였습니다. 쉘 스크립트 파일을 실행하는 방법은 어떠한 것이 있을까요? 쉘 스크립트 파일을 만들면 일반적으로 실행 권한을 부여합니다. 다른 사용자도 사용할 수 있도록 할지 자신만 사용할지를 잘 결정하여 권한을 부여하는 것이죠. 그리고 파일을 실행합니다.

[root@shell01 ~]# chmod +x test.sh
[root@shell01 ~]# chmod u+x test.sh
[root@shell01 ~]# chmod  
[root@shell01 ~]# ./test.sh

이때 ./의 뜻은 '현재 디렉터리 밑에'라고 보시면 됩니다. 또는 아래와 같이 bash 명령을 실행하여 인자 값으로 쉘 스크립트 파일명을 줘도 실행됩니다. 보통은 디버그를 하기 위해 -x 옵션을 줘서 실행하죠.

[root@shell01 ~]# bash test.sh
[root@shell01 ~]# bash -x test.sh

또는 반복적으로 실행하는 명령을 특정 디렉터리에 보관하고 있다면 .bash_profile 초기화 파일에 PATH 변수에 경로를 설정하고 쉘 스크립트 파일 이름으로 실행할 수 있습니다. 유닉스나 리눅스는 확장자에 대한 의미를 크게 두지 않습니다.

[root@shell01 ~]# bash test.sh

다음 게시물에서 지역변수와 환경변수에 대해 알아보도록 하겠습니다.