출처 : http://blog.naver.com/akrthwn?Redirect=Log&logNo=140017739530
shell programming에 대한 자료가 많이 있다. 참고할 것
x box로 표시된 그림들은 어차피 내용과 상관없는 아이콘들이다. 일일이 지우고 다시 표시해주기 귀찮아 그냥 복사해뒀다.
변수의 정의
Shell에서 사용되는 변수는 문자, 숫자, _(언더바)로 구성될 수 있지만, 시작은 반드시 문자나 _로 시작
Shell에서 사용되는 변수의 모든 값은 문자열로 처리되기 때문에 따로 유형을 선언해 줄 필요가 없다
정의되지 않은 변수의 초기값은 널(Null) 문자열
Shell에서 사용되는 변수는 3가지로 나눌 수 있다.
사용자 정의 변수(지역 변수) : 사용자가 임의로 지정해서 사용하는 변수
시스템 정의 변수(환경 변수) : Shell이 자동적으로 지정하는 변수, 사용자는 참조만 가능
특수 변수(인자 변수) : Shell이 특수하게 해석하는 변수
변수 대체
name=value : 변수 name에 value라는 값을 할당
$name : 변수 name에 입력된 값을 호출
변수에 문자열을 사용할 경우 작은 따옴표(' ')를 이용하여 문자열을 둘러싸면 됨
readonly : 더 이상 변수의 값을 다시 할당할 일이 없을 때 사용
▼ [변수 대체의 예]
|
[root@linuxone root]# name='redhat linux' // name이라는 변수에 'redhat linux'라는 값을 할당
[root@linuxone root]# echo $name // echo 명령어를 이용하여 name에 할당된 값 호출
redhat linux
[root@linuxone root]# name=apple // 다시 name이라는 변수에 apple이라는 값 할당
[root@linuxone root]# echo $name // echo 명령어를 이용하여 name에 입력된 값 호출
apple
[root@linuxone root]# readonly name // readonly 명령어를 이용하여 더 이상 name이라는
// 변수에 값이 할당되지 못하도록 설정
[root@linuxone root]# echo $name // echo 명령어를 이용하여 name에 입력된 값 호출
apple
[root@linuxone root]# name=tomato // name이라는 변수에 tomato 라는 값을 할당하면
bash: name: readonly variable // 더 이상 값을 할당할 수 없다는 메시지를 출력
[root@linuxone root]# |
변수연산자
${varname}
varname에 해당하는 변수 치환이 이루어짐
${varname:=value}
varname의 값이 null이면 value를 값으로 할당
만약 varname의 값이 null이 아니면 기존의 값을 그냥 사용
|
[root@linuxone root]# echo $profile
[root@linuxone root]# echo ${profile:='linux man'}
linux man
[root@linuxone root]# echo $profile
linux man
[root@linuxone root]# |
${varname:+value}
varname의 값이 null이 아니면 value 값을 할당
만약 varname의 값이 null이라면 value의 값을 varname에 할당하지 않음
|
'linux'의 변수 값으로 'redhat'이라는 값이 할당되어 있기 때문에 '${linux:+kernel}' 구문에서 'kernel'이라는 값을 할당하더라도 실질적인 'linux'의 값으로는 여전히 'redhat'이라는 값이 할당되어 있음
[root@linuxone root]# linux=redhat
[root@linuxone root]# echo $linux
redhat
[root@linuxone root]# echo ${linux:+kernel}
kernel
[root@linuxone root]# echo $linux
redhat
[root@linuxone root]#
만약 변수 'linux에 값이 할당되어 있지 않으면 'redhat'이라는 새로운 값을 여전히 할당하지 않는다.
[root@linuxone root]# echo $linux
[root@linuxone root]# echo ${linux:+kernel}
redhat
[root@linuxone root]# echo $linux
[root@linuxone root]# |
${varname:-value}
varname의 값이 null이라면 기존의 값을 그냥 사용
만약 varname의 값이 null이 아니라면 value의 값을 varname에 할당하지 않음
|
'MR' 이라는 변수에 값이 할당되어 있지 않기 때문에 기존의 값(null)을 그대로 사용함
[root@linuxone root]# echo $MR
[root@linuxone root]# echo ${MR:-MISS}
MISS
[root@linuxone root]# echo $MR
[root@linuxone root]#
하지만, 'MR'이라는 변수 값으로 'Hong'이 할당되어 있지만 새로운 값 'gil'로 바꿔지지 않는다. 즉, '${varname:-value}'는 varname에 할당되어 있는 값(null 일 수도 있고, 아닐 수도 있다)를 그냥 사용한다고 할 수 있다.
[root@linuxone root]# echo $MR
Hong
[root@linuxone root]# echo ${MR:-gil}
Hong
[root@linuxone root]# echo $MR
Hong
[root@linuxone root]# |
${varname:?value}
varname의 값이 null이면 value의 값을 오류 메시지로 출력하고 프로그램을 종료
|
'MONTH'라는 변수에 값을 할당하지 않았기 때문에 에러 메시지로 새로 입력되는 값인 'november'를 출력함. 그러나 여전히 'MONTH'라는 변수가 값을 가지고 있지 않음
[root@linuxone root]# MONTH=" "
[root@linuxone root]# echo ${MONTH:?november}
bash: MONTH: november
[root@linuxone root]# echo MONTH
[root@linuxone root]#
만약, 'MONTH'라는 변수에 'december'를 값으로 할당한다면 여전히 할당된 값(december)을 사용하고 있다.
[root@linuxone root]# MONTH=december
[root@linuxone root]# echo $MONTH
december
[root@linuxone root]# echo ${MONTH=?november}
december
[root@linuxone root]# echo $MONTH
december [root@linuxone root]# |
주석문
Shell 프로그램에서 "#" 기호 뒤에 있는 모든 부분을 지칭
새로운 행으로 가면 주석문이 끝나므로 계속해서 주석문을 사용하려면 새로운 행에 "#" 기호를 써주어야 함
명령어의 오른쪽에도 주석문이 사용될 수 있는데, "#" 기호 앞에는 적어도 하나 이상의 공백문자나 tab이 존재해야 함
배정문
varname="string" 또는 varname=$varname2
변수에 대한 배정문은 "=" 문자를 사용
Bourn Shell에서는 "=" 문자의 앞뒤에 공백문자나 tab이 없어야 하지만 C Shell의 경우에는 허용이 됨
변수명은 첫 자가 특수문자가 아닌 영문이나 숫자이어야 하고, 연속된 문자열이어야 함
두 개 이상의 단어를 묶어서 지정하려면 반드시 " "를 사용
인용처리
$ 변수 표현을 이중 인용부초(" ") 문자로 묶으면 변수는 변수의 값으로 대체
$ 변수 표현을 단일 인용부호( ' ') 문자로 묶으면 아무런 대체 과정도 일어나지 않고 단일 인용부호에 의해 둘러싸인 모든 문자열을 하나의 인수와 같이 취급
$ 변수 앞에 □ 문자를 붙이면 $의 특별한 의미는 무조건 제거
역 인용부호(``)는 매우 특이하게 사용되는데 역 인용부호 내의 내용은 shell에 의해 실행되고 그 결과가 역 인용부호가 있었던 위치에 치환
환경변수
사용자가 사용하게 될 환경(로그인 한 후 사용하게 될 환경)에 저장되어 있는 변수
Shell Script가 실행될 때, 여러 변수의 값이 기존의 환경으로부터 초기화 되는데 이 변수들은 보통 대문자로 표시된다 - 사용자의 정의 변수와 구별하기 위해서임
사 용자 정의 변수는 소문자를 많이 사용하는데, 만들어지는 변수는 사용자의 개인적인 설정에 따라 다르다. 이러한 환경 내용에는 단말기의 종류와 속성, 로그인 사용자, 호스트 이름, 쉘이 사용할 명령어의 경로, 전자우편을 전송할 경로, 로그인 홈 디렉토리 등의 내용이 들어있다.
지역변수
쉘이 자식 쉘을 생성해서 명령을 실행하면, 부모 쉘에서 사용하던 쉘 변수들을 모두 사용할 수 없게 됨
현재 쉘에 국한되어 사용되어지는 변수
사용자가 직접 생성한 변수는 모두 지역 변수
set : 현재의 지역 쉘 변수를 확인하는 명령어
unset : 지역 변수를 없애는 명령어
export
단순히 지역 변수로 만들어진 변수를 환경 속으로 전송하게 함
환경 속으로 지역 변수를 전송하는 것은 지역 변수로 정의된 변수가 다른 프로세서에서 사용될 수 있도록 하기 위해서 로컬 데이커의 공간에서 환경 데이터의 공간으로 전송하는 것을 의미
기타 변수 - 인자변수
특별한 용도의 내장 변수들
프롬프트 지정 변수 PS1 : 명령 대기 상태를 알리는 쉘 프롬프트의 모양을 사용자 임의로 만들 수 있는 변수로 여러 기호와 함께 사용되어 쉘 프롬프트의 다양한 출력 모양을 만들어 낼 수 있다.
'Programming > linux왕초보' 카테고리의 다른 글
| VMware에서 telnet server 실행 및 접속 (0) | 2011.09.26 |
|---|---|
| grep 사용하기 (1) | 2011.07.29 |
| 어셈 명령어 정리 (1) | 2011.03.22 |
| linux 병렬포트(프린트포트) 제어 (0) | 2008.10.13 |
| 리눅스 버젼확인은 어찌하나요???;; (0) | 2008.09.12 |
| shell programming - 제어문 (0) | 2008.09.11 |
| shell programming - 제어문 (0) | 2008.09.11 |
| shell programming - 반복문 (0) | 2008.09.11 |
| shell programming - 목록과 함수 (0) | 2008.09.11 |
| shell programming - 명령 실행 (0) | 2008.09.11 |