제2장 쉘 프로그래밍
3. 쉘 변수들
쉘에서 사용되는 변수는 문자, 숫자, _(언더바)로 구성될
수 있지만, 시작은 반드시 문자나 _로 시작되어야 합니다. 쉘에서 사용되는 변수의
모든 값은 문자열로 처리되기 때문에 따로 유형을 선언해 줄 필요가 없습니다. 정의
되지 않은 변수의 초기값은 널(null) 문자열입니다. 쉘에서 사용하는 변수는 크게
3가지로 나눌 수 있습니다.
- 사용자 정의 변수 : 사용자가 임의로 지정해서 사용하는
변수입니다.
- 시스템 정의 변수(표준 변수) : 쉘이 자동적으로 지정하는
변수, 사용자는 참조만 가능합니다.
- 특수 변수(기호변수) : 쉘이 특수하게 해석하는 변수입니다.
가. 사용자 정의 쉘 변수
쉘 명령어에 사용되는 변수는 다음과 같은 형식으로 정의
하여 사용합니다.
변수명 = 문자열 또는 $변수명
쉘 변수명은 첫 자가 특수문자가 아닌 영문, 숫자이어야
하고 연속된 문자열이어야합니다. 두 개 이상의 단어를 묶어 지정하려면, "
"를 사용합니다. 또 사전에 정의한 변수를 쉘 프로그램에서 호출하거나 사용하려면
특수 기호인 $를 변수면 앞에 붙여 그 단어가 쉘 변수임을 나타내도록 해야 합니다.
예를 들면 다음과 같습니다.
# ec="electronic commerce" # echo $ec electronic
commerce
# plus=3+4 # echo $plus
3+4
#
다음내용은 test1.sh로 저장해서 실행해 보십시오
# vi test1.sh
greeting="How are You" echo $greeting echo
"greeting" echo '$greeting' echo \$greeting echo Enter your
name : read name echo $greeting $name exit 0
[root@w3 /root]# sh test1.sh How are You greeting $greeting $greeting Enter
your name : Lee jin kwan How are You Lee jin kwan [root@w3 /root]#
나. 시스템 정의 쉘 변수(환경변수)
사용자 로그인을 하면, 자동으로 지정되는 여러 변수가 있습니다.
이 변수 들은 쉘에서 사용되기도 하고, 기타 여러 프로그램에서 사용됩니다.
이 변수들은 각각 고유한 이름을 가지며 그 변수 이름과
함께 고유한 변수값을 가집니다. 이것은 일반적으로 사용자마다 다르며, 이것이 바로
각 사용자의 작업 환경이 됩니다.
이렇게 미리 정의된 변수들도 쉘 스크립트에서 사용할 수
있습니다. 또한 쉘 스크립트에서 이런 변수들과 그 값을 사용하려면 먼저 그 변수가
export명령으로 미리 지정되어야 합니다. 일반적으로 로그인 과정에서 자동으로 처리됩니다.
사용자는 set 명령을 사용해 모든 현재 변수의 전체 리스트를
볼 수 있습니다.
# set | more
환경변수 전체를 보는 명령은 다음과 같습니다.
# env | more
--------------------------------------------------------------------------- 환경변수
설명 --------------------------------------------------------------------------- $HOME
사용자의 홈디렉토리명을 포함합니다.
로그인시 지정되며 UNIX파일 시스템내에
저장된 파일을 액세스할 필요가 있는 프로그램에 의해 사용됩니다.(.profile,
.login, .cshrc, 등) --------------------------------------------------------------------------- $LOGNAME
사용자의 로그인명입니다.($USER) --------------------------------------------------------------------------- $MAIL
or 메일 도착을 알고자 할 때 사용됩니다. 둘 중 하나만
지정되어야 $MAILPATH 합니다. $MAIL이 지정되면, 메일이 도착할
파일명이 지정되어야 합 니다.
$MAILPATH가 지정되면 콜론(:)으로 분리된 메일 파일의 리스 트여야
합니다. 이들 변수는 메일 프로그램이 email을 어디에 놓아 야
하는지를 지정하지는 않지만, 새로운 메일이 도착하면 Shell이 어디를
찾아야 하는지를 지정합니다. --------------------------------------------------------------------------- $MAILCHECK
메일 파일의 검사간격을 초단위로 지정합니다. --------------------------------------------------------------------------- $SHELL
로그인 쉘명입니다. vi 텍스트 에디터와 같이
프로그램을 빠져나가 지
않고도 또 다른 대화형 SHELL을 부르기를 원하는 프로그램에서 사용됩니다. --------------------------------------------------------------------------- $PS1
쉘이 사용할 첫 번째 프롬프트
스트링으로 디폴트는 $입니다. --------------------------------------------------------------------------- $PS2
두 번째 프롬프트 스트링입니다.
명령이 완전히 끝나지 않고 쉘이 또다른
입력 행을 요구할 때, 사용되는데, 디폴트는 >입니다. --------------------------------------------------------------------------- $TERM
사용자의 터미널형을 포함합니다. vi
같은 어떤 명령은 정확한 결과 를
내기 위해 사용중인 터미널의 종류가 무엇인지를 알 필요가 있습 니다. ---------------------------------------------------------------------------
다. 특별한 쉘변수
다음은 쉘에서 특별한 의미로 사용되는 변수 이름들입니다.
환경변수의 특별한 형태라고 생각하면 됩니다.
--------------------------------------------------------------------------- 이름
설명 --------------------------------------------------------------------------- $1~$9
각 명령행 인자 $0 쉘
스크립트 자체, 또는 그 명령 자체 $# 명령행에서
주워진 명령행 인자의 개수 $? 가장
최근에 마친 명령의 return값이 10진수 문자열로 저장되는 변수. 보통
한 명령이 아무 오류 없이 성공적으로 끝나면 이 값은 0 이고, 그렇지
않으면 0 이외의 값이 지정됩니다. $$ 현재
쉘의 프로세스 번호 - 보통 고유한 파일이름을 만들려고 할 때 사용됩니다. $!
현재 background로 실행되는 마지막,
명령의 프로세스 번호 $- 현재 쉘이
호출될 때 사용한 옵션들 $* 명령행
인자의 모든 것 $@ 위 변수와 똑같지만,
따옴표 처리 문제에서 다름 ---------------------------------------------------------------------------
[ $*과 $@ 변수의 차이점 ]
"$*" 이렇게 변수가 따옴표로 묶여지면, 쉘에서의
공백 문자 식별로 무조건 처리하는 것으로 '1 2' 3 같은 명령행 인자가 있다면, 이것을
"1 2 3" 이렇게 하나의 인자로 처리합니다.
"$@" 이렇게 변수가 따옴표로 묶여지면, '1 2'
3같은 명령행 인자가 있다면, 이것을 "1 2" "3" 이렇게 두 개의
인자로 처리합니다.
|