리눅스마스터1급 : Shell 프로그래밍
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 3,091 조회
- 0 추천
- 목록
본문
리눅스마스터1급 : Shell 프로그래밍
쉘 스크립트에는 반복되는 작업에 대한 명령을 기술할 수 있는데 이것 자체로 유용한 프로그램을 만들 수도 있다.
즉, 자동화를 통해 어려운 작업을 한 번에 끝낼 수 있는 것이다.
예를 들어 모든 프로그램들을 수동으로 수행시켜야 한다고 생각하면 매우 번거로울 것이다.
한편, 리눅스에서 쉘 스크립트는 세션의 설정을 위해서 사용되기도 한다.
/etc/rc.d/init.d 아래의 파일들은 모두가 쉘 스크립트들이다.
이렇게 쉘이 수행하는 명령어들을 저장하고 있는 파일을 ‘쉘 스크립트(shell script)’라고 하며, 쉘 스크립트를 제작하는 것을 ‘쉘 프로그래밍(shell programming)’이라고 한다.
여기서는 Bash의 변수와 쉘 스크립트의 문법에 대해서 간단하게 알아보도록 한다.
문법들을 간단하게 이해하기 위해서 문자의 뜻을 간단하게 따져보는 것이 도움이 될 것이다.
이러한 문자들도 그 기능에 따라 이름이 붙여졌기 때문이다.
그리고 조건문 등에서 자주 사용되는 &&와 ||는 각각의 명령문에서 각각 and와 or를 뜻하고, ( list ) 괄호는 서브쉘, { list; } 은 현재 쉘 환경에서 작동되는 것을 뜻하므로 기억해 두기 바란다.
이외의 자세한 옵션 등은 man 페이지를 참조하기 바란다.
스크립트 작성
1) 변수의 속성 정의
쉘에서 사용되는 매개 변수는 시스템에 이미 정의되어 있는 것과 사용자에 의해 정의되는 것 두 가지를 둘 수 있다.
이 두 가지는 적절히 혼합되어 사용될 수 있을 것이다.
특히 전자의 경우에는 위치 매개 변수, 특별(Special) 매개 변수, 쉘 변수(Environment Variables) 등으로 나누어 볼 수 있다.
이 중에서 쉘 변수는 사용자가 쉘 환경을 설정하기 위해 사용되는 쉘의 환경 변수라고 할 수 있다.
① 위치 매개 변수0 하나만 적는 것을 제외하고 숫자로 지시하는 매개 변수를 말한다.
위치 매개 변수는 쉘이 실행될 때 인수로부터 지정되거나 또는 set 내부 명령을 사용하여 재지정할 수 있다.
위치 매개 변수는 변수 지정 문장을 사용하여 지정할 수 없으며, 쉘 함수가 실행될 때 일시적으로 치환된다.
1개 이상의 숫자로 구성된 위치 매개 변수를 확장할 때에는 중괄호로 묶어 주어야 한다.
② 특별 매개 변수쉘은 몇 가지 매개 변수를 특별하게 처리한다.
이러한 매개 변수는 참조만 가능할 뿐 값을 지정할 수는 없다.
이것들은 “$*”의 형태로 사용한다.
* | 1 부터 시작하여 위치 매개변수로 확장. 더블 쿼우트에서 확장이 이루어지면 각 매개변수 값을 한 단어로 확장. 각 단어는 IFS 특별 변수의 첫번째 문자로 구분. 즉, “$*”는 “$1c$2c...”와 같다.
여기서 c 는 IFS 변수의 첫번째 문자. IFS가 null이거나 해제되어 있으며 매개 변수는 스페이스로 구분. |
@ | 1 부터 시작하여 위치 매개 변수로 확장. 더블 쿼우트 안에서 확장이 이루어질 때에는 각 매개 변수가 개별적인 단어로 확장. 즉 “$@”는 “$1” “$2” ... 와 같다.
위치 매개 변수가 없을 때에는 “$@”와 $@은 아무 것으로도 확장되지 않는다.(즉, 없었던 것처럼 제거.) |
# | 십진수로 위치 매개변수의 수로 확장. |
? | 최근에 실행된 포그라운드 파이프라인의 상태값으로 확장. |
- | 실행하자마자 set 내부 명령을 통해 또는 쉘 자체에 의해 (예를 들어 -i 플래그) 설정된 현재 옵션 플래그로 확장. |
$ | 쉘의 프로세스 ID로 확장. () 서브쉘에서는 서브쉘이 아닌 현재 쉘의 프로세스 ID로 확장. |
! | 최근에 실행한 백그라운드(비동기) 명령의 프로세스 ID로 확장. |
0 | 쉘 또는 쉘 스크립트의 이름으로 확장. 쉘 초기 과정 중에 설정됨. bash가 명령을 포함하는 파일 이름으로 실행되었다면, $0는 그 파일의 이름으로 설정됨. bash 가 -c 옵션을 가지고 실행되었다면 $0는 실행될 문자열(있는 경우) 뒤 첫번째 인수로 설정됨. 그렇지 않은 경우 bash를 실행할 때 0번 인수로 주어진 경로명으로 설정됨. |
_ | 지난 번 명령의 마지막 인수(확장되고 난 형태)로 확장. 실행된 각 명령의 완전한 경로명으로도 설정되며 그 명령에게 export한 환경에 위치. |
③ 쉘 변수
쉘 변수는 쉘의 환경 변수로서 리눅스 자체에 의해 만들어지고 유지되어지는데, 이들은 앞에 $과 함께 적어서 사용한다(예, $ENV). env 명령에 의해 이들 정보에 대해서 알 수 있다.
이 변수들은 기본값이 제공되기는 하지만 사용자에 의해 설정이 가능한 것들이다.
앞서 주요한 쉘 변수에 대해서 이미 살펴보았다.
④ 사용자 정의 변수 사용(프로그램 변수, Program Variables)
쉘에서 변수는 사전 선언을 할 필요가 없고, 변수를 처음 사용할 때 만들게 된다.
일반적으로 변수는 문자열 형태로 저장된다.
즉, 수치값을 변수에 할당한다고 해도 문자열 형태로 저장된다.
또한 유닉스에서는 대소문자를 확실하게 가리기 때문에 변수명의 대소문자도 잘 가려 사용해야 한다.
변수 지정의 가장 간단한 것은 다음과 같이 “이름=[값]” 의 형태로 하는 것이다.
여기에서 어떤 데이터에 대한 정의도 하지 않았다.
|
|
|
| #!/bin/bash aaa="Hello World" echo $aaa |
|
|
|
|
여기서는 aaa 라는 변수에 “Hello World!” 라는 문자열을 저장하였다.
그리고 마지막 줄에서 echo 명령으로 변수 aaa 를 출력하였다.
즉, 단순히 두 번째 줄에 “Hello World!”라는 문자열을 대체하는 변수 STR을 지정하고, 이 변수의 값은 $이라는 문자가 변수의 앞에 놓일 때 사용된다.
그렇지만, 사용하고자 하는 변수를 선언할 때 다음과 같은 규칙에 따라야 한다.
∙첫 글자는 영숫자일 것 : A-Z, 0-9, a-z, _
∙길이는 특별한 제약이 없으나 너무 길게 하지 말 것
∙대·소문자 구분
|
|
|
| 쉘스크립트에서 쓰이는 표현들 본격적으로 쉘스크렙트를 작성하기 전에 대표적으로 사용되는 표현들을 살펴보자.
∙문자열 비교 연산자문자열의 비교는 조건문이나 반복문과 함께 자주 사용되는 연산자들이다.
s1 = s2 : s1 은 s2 와 같다. s1 != s2 : s1 은 s2 와 같지 않다. s1 < s2 : s1 은 s2 보다 작다. s1 > s2 : s1 은 s2 보다 크다. -n s1 : s1 은 빈 문자열이 아니다.(한 개 이상의 문자를 포함) -z s1 : s1 은 빈 문자열이다.
∙산술 연산자산술 연산자는 어떤 프로그래밍 언어를 만나더라도 가장 기초가 되는 연산자이다.
+ : 더하기- : 빼기* : 곱하기/ : 나누기 % : 나머지
∙산술 관계 연산자문자열 비교 연산자와 마찬가지로 조건문이나 반복문에 자주 사용되는 연산자들이다.
-lt (<)-gt (>)-le (<=)-ge (>=)-eq (==)-ne (!=)
∙기타-o : 또는(or)-a : 그리고(and) |
|
|
|
|
2) 복합 명령
Bash 쉘에서 사용할 수 있는 복합 명령은 if, case, for, while, until, select 및 함수이다.
이와 관련하여 쉘스크립트 내에서 “(명령어들)”은 서브쉘 안에서 실행되고 명령이 완료된 후에는 쉘의 환경에 영향을 미치는 변수지정과 내부 명령의 효과가 사라지며, { 명령어들; }은 현재의 쉘 환경에서 실행된다.
① if리눅스 쉘프로그램 내에서의 if 문은 조건식을 평가하여 그 결과가 참인지 여부에 따라 분류하여 프로그램을 실행할 수 있도록 하기 위한 목적으로 사용된다.
조건문은 여러 가지 형식으로 표현할 수 있지만, 가장 기본적인 것은 if (조건) then (실행할 내용)으로 구성되는 것으로 실행할 내용(then이후 문장)은 오직 조건이 맞을 때에만 실행된다.
즉, 결과가 참일 경우 종료값으로 0을 반환한 후에 then 이후의 문장이 실행되고 결과가 참이 아닌 경우에는 1을 반환한 후에 if 문을 종료하게 된다.
fi는 if 문의 끝임을 표시하는 문장이다.
if 문의 사용형식은 다음과 같다.
|
|
|
| if [조건식]; then {결과가 참일 때 수행할 명령문} fi |
|
|
|
|
다음과 같이 if .. then의 간단한 사용례를 보자. 다음은 특정 쉘프로그램을 root 권한으로만 실행가능하도록 하기 위하여 쉘프로그램의 초기에 root 사용자인지를 확인하여 root가 아닐 경우에는 간단한 메시지를 출력하고 쉘 프로그램을 종료하고, root 사용자인 경우에는 쉘프로그램을 실행하도록 하는 쉘프로그램의 예이다.
|
|
|
| #!/bin/bash
if [ $LOGNAME != root ] then echo Sorry. It is allowed to root user ... exit 1 fi
find /dev –type f –exec ls –l {} \; |
|
|
|
|
“if [ $LOGNAME != root ]”는 이 쉘프로그램의 핵심적인 내용으로서 쉘 환경 변수인 LOGNAME의 값이 root인지 여부를 if 문으로 체크하게 된다.
즉, 이 쉘프로그램을 실행하였을 때에 실행할 사용자의 LOGNAME의 값이 root가 아닌 경우에는 then 다음의 echo 문을 실행한 후에 쉘프로그램을 종료하고 root일 경우에는 if문의 끝을 표시하는 fi 문장의 다음에 있는 “find /dev –type f –exec ls –l {} \;”이 실행된다.
이것은 if ~ else 문의 형태로도 가능하다.
이것은 조건식에 맞지 않으면 else 이후의 명령문을 수행하도록 한 것이다.
|
|
|
| #!/bin/bash if [ $LOGNAME != root ] then echo Sorry. It is allowed to root user ... else find /dev –type f –exec ls –l {} \; fi |
|
|
|
|
조건문의 또 다른 형식으로서, if ~ elif ~ else 문은 여러 개의 조건식을 평가하여 조건에 맞는 경우에 프로그램을 실행할 수 있도록 하기 위한 목적으로 사용된다.
이것은 if (조건 1) then (실행할 내용 1) elif (조건 2) then (실행할 내용 2) else (실행할 내용 3)의 형식을 취하는데, 이것은 만약 조건 1은 만족하지 않고 조건 2를 만족하면 실행할 내용 2가 실행되고, 그렇지 않으면 실행할 내용 3이 실행된다는 것이다.
여기서 elif 부분은 여러 차례 반복할 수 있다.
|
|
|
| if [조건식1]; then {참일 때 수행할 명령문 1} elif [조건식2] then {참일 때 수행할 명령문 2} else {위 모든 조건식의 결과값이 거짓일 때 수행할 명령문 3} fi |
|
|
|
|
다음 예는 read 문으로 사용자가 입력한 점수를 입력 받아서 그 점수에 따른 등급을 출력하는 것이다.
조건 및 그 조건에 따른 결과는 다음과 같다.
∙0점부터 20점까지이면 : “Your grade : E”를 출력한다.
∙21점부터 40점까지이면 : “Your grade : D”를 출력한다.
∙41점부터 60점까지이면 : “Your grade : C”를 출력한다.
∙61점부터 80점까지이면 : “Your grade : B”를 출력한다.
∙81점부터 100점까지이면 : “Your grade : A”를 출력한다.
|
|
|
| #!/bin/bash
echo input your point from 0 to 100 : read point
if [ $point –lt 0 –o $point –gt 100]; then echo It is impossible point. elif [ $point –ge 0 –a $point –le 20]; then echo Your grade : E elif [ $point –ge 21 –a $point –le 40]; then echo Your grade : D elif [ $point –ge 41 –a $point –le 60]; then echo Your grade : C elif [ $point –ge 61 –a $point –le 80]; then echo Your grade : B elif [ $point –ge 81 –a $point –le 100]; then echo Your grade : A else echo It is not allowed fi |
|
|
|
|
② casecase 문은 선택 가능한 경우의 수가 여러 가지일 때 사용하는 조건 분기문이다.
이것은 if ~ else 문이나 if ~ elif ~ else 문과 동일한 효과가 있기 때문에 이들을 대신하여 사용되는 경우가 많다.
즉, 이들과 같이 중첩되는 if 문으로 여러 개의 조건문을 사용하면 프로그램의 가독률이 떨어지기 때문에 작성하기 쉽고 읽기 쉬운 case 문을 사용한다.
case 문의 형식은 다음과 같다.
|
|
|
| case $변수 in 값 1) 변수의 값이 1일 경우에 실행될 명령문들 ;; 값 2) 변수의 값이 2일 경우에 실행될 명령문들 ;; 값 3) 변수의 값이 3일 경우에 실행될 명령문들 ;; 값 4) 변수의 값이 4일 경우에 실행될 명령문들 ;; ...... *) 위의 해당사항이 없을 경우에 실행될 명령문들 ;; esac |
|
|
|
|
위의 case 문 형식에서 사용자가 입력한 변수의 값이 “값 1”과 일치할 때에는 그 뒤의 명령문들이 실행되고, “값 2”와 일치할 때에는 그 뒤의 명령문들이 실행되며, “값 3”과 일치할 때에는 그 뒤의 명령문들이 실행되고 ...... 해당 되는 값이 없을 경우에는 *) 뒤에 있는 명령문들이 실행된다.
그리고 esac는 case 문의 종료를 의미한다.
다음은 case 문을 이용한 간단한 쉘프로그램의 예이다.
A, B, C, D, E의 메뉴에서 쉘프로그램의 사용자가 선택한 문자를 입력받아서 그에 맞는 실행을 하게 된다.
다음은 사용자가 선택할 수 있는 메뉴와 그 결과이다.
∙A이면 “You select A MENU”가 출력된다.
∙B이면 “You select B MENU”가 출력된다.
∙C이면 “You select C MENU”가 출력된다.
∙D이면 “You select D MENU”가 출력된다.
∙E이면 “You select E MENU”가 출력된다.
∙이외의 값이 선택되면 “select A, B, C, D or E”가 출력된다.
|
|
|
| #!/bin/bash
echo Select MENU to run A, B, C, D, E : read point
case $point in A) echo You select A MENU ;; B) echo You select B MENU ;; C) echo You select C MENU ;; D) echo You select D MENU ;; E) echo You select E MENU ;; *) echo select A, B, C, D or E ;; esac |
|
|
|
|
③ for다음에는 for, while 그리고 until을 사용하는 루프(loop, 순환, 반복)에 대해서 알아본다.
리눅스 쉘프로그램내에서 사용되는 for 문은 변수의 값을 변화시키면서 반복되는 내용을 구현하기 위해 사용하는 루프문이다.
쉘프로그램에서 반복문이 필요할 때 가장 흔하게 사용되는 구문이다.
이것은 다른 프로그래밍 언어들과는 좀 다르기 때문에 쉘 스크립트를 작성할 때 주의해야 한다.
for 문의 형식은 다음과 같다.
|
|
|
| for {변수} in {반복하여 사용될 값들} do 반복되는 동안 실행될 명령문들 done |
|
|
|
|
문법을 쉽게 풀어서 생각해 보면 변수가 어떤 값들에 해당하는 동안 문장을 실행하라는 의미이다.
즉, “변수”는 for 문이 반복되는 동안에 사용될 인자이며, in 뒤에 있는 “반복하여 사용될 값들”은 for 문이 반복되는 동안에 각각의 값이 “변수”에 해당된다.
그리고 do 와 done는 C의 {와 }에 해당하는데, for 문이 반복되는 동안에 “do ~ done” 내에 있는 “반복되는 동안 실행될 명령문들”이 한 번씩 실행된다.
|
|
|
| #!/bin/bash
for var1 in 1 2 3 4 5 do echo var1 value is $var1 done |
|
|
|
|
위에서 for 문이 한 번씩 반복될 때마다 var1의 값은 1, 2, 3, 4, 5로 각각 치환되어, 모두 5번의 “do ~ done” 내의 “echo var1 value is $var1”이 실행된다.
즉, 쉘스크립트를 실행하면 $var의 값이 1, 2, 3, 4, 5로 각각 치환되어 var1의 값이 1일 경우에 “var1 value is 1”이 출력되고, var1의 값이 2일 경우에 “var1 value is 2”가 출력되며, var1의 값이 3일 경우에 “var1 value is 3”이 출력되고, var1의 값이 4일 경우에 “var1 value is 4”가 출력되며, var1의 값이 5일 경우에 “var1 value is 5”이 출력된다.
④ while
while 문은 주어진 조건식이 참(true)일 경우(종료코드가 0일 경우에 참) “do ~ done”의 내용을 반복적으로 실행하고 그렇지 않고 거짓(false)일 경우 while 문을 종료하는 반복문이다.
while 문의 “do ~ done” 내에는 반복되는 동안 실행될 내용들과 함께 조건식을 변화시키는 변수의 수식이 들어가는 것이 일반적이다.
즉, 1씩 증가를 시킨다든지 1씩 감소를 시키는 등과 같이 특정 조건에서 while 문이 종료될 수 있도록 조건식에 변화를 주는 수식이 들어가게 된다.
만약 거짓인 경우가 설정되지 않는 경우에는 무한루프가 된다.
다음은 while 문의 일반적인 사용 형식이다.
|
|
|
| while (조건문) do 반복되는 동안 실행될 명령문들 done |
|
|
|
|
여기서 “조건문”의 값이 참인 경우에 “do ~ done” 내의 내용이 계속해서 실행되는데, done 문을 만나면 while 문의 처음으로 돌아가서 다시 “조건문”을 평가하고, “조건문”이 거짓이 되는 경우에 while 문이 종료되고 done 다음에 있는 실행문으로 넘어간다.
다음은 while 문을 이용한 간단한 쉘프로그램이다.
|
|
|
| #!/bin/bash
var1=0 while ( $var1 < 5 ) do echo var1 value is $var1 let var1+=1 done |
|
|
|
|
위의 쉘프로그램에서 “var1=0”으로 var1 변수의 초기값으로 0이 할당되었다.
그리고 “while ( $var1 < 5 )”에 따라 만약 var1이 5와 같거나 클 경우에 while 문을 종료하고 done 다음의 실행문으로 넘어간다.
또한 “do ~ done” 내의 명령문은 var1의 값이 5보다 작을 동안에 실행되는 내용들인데, 이 반복문에 있는 “let var1+=1”이 한번씩 실행될 때마다 var의 값이 1씩 증가되어 조건문의 상태를 변화시킨다.
⑤ untiluntil 문은 주어진 조건식이 참일 때까지 “do ~ done”의 내용을 반복하여 실행하는 반복문이다.
즉, until 문은 while 문과 비슷하지만, 조건문은 의미가 상반된 경우이다.
즉, until문은 “참이 될 때까지” 실행되는 것을 의미하지만, while은 “참일 동안” 실행되는 것을 의미한다.
until 문의 사용형식은 다음과 같다.
|
|
|
| until {조건문} do 조건문이 거짓일 동안에 실행될 명령문들 done |
|
|
|
|
until은 조건문의 값이 거짓일 동안에 “do ~ done”의 내용을 계속해서 반복 실행한다.
done 문을 만나면 until 문의 처음으로 돌아가서 다시 조건문을 평가하고, 조건문이 참이면 until문을 종료하게 된다.
즉, 조건문의 결과가 0이면 참이 되어 until문이 종료되고 done 다음에 있는 문장으로 넘어간다.
다음은 until문을 이용한 간단한 쉘프로그램이다.
|
|
|
| #!/bin/bash
var1=0 until (( $var1 == 5 )) do echo var1 value is $var1 let var!+=1 done |
|
|
|
|
위의 예에서 “var1=0”는 var1의 초기값으로 0을 할당한 것이다.
그리고 “until (( $var1 == 5 ))”는 var1의 변수값이 5가 되면 until 문을 종료하고 done 다음으로 넘어가도록 한 것이다.
“do ~ done” 부분은 var1의 값이 5가 될 때까지 계속 실행될 내용이다.
이 반복문 내에 있는 “let var+=1”은 한 번씩 실행될 때마다 var1의 값이 1씩 증가되어 조건문의 상태를 변화시킨다.
결론적으로 쉘프로그램은 var1의 값이 0, 1, 2, 3, 4일 때 각각 한번씩 실행되며(각각 “var1 value is 0”의 형태로 출력된다) 모두 5회 반복된다.
⑥ selectselect 문은 메뉴방식의 반복문으로 동작하는 쉘프로그램을 만들고자 하는 경우에 사용한다.
이것은 조건문이나 반복문과는 달리 반복되는 메뉴방식의 쉘프로그램을 만들 때에 최적이다.
select 문의 사용방식은 다음과 같다.
|
|
|
| select 변수 in 메뉴리스트 do 실행될 명령문들 done |
|
|
|
|
select 문으로 반복 메뉴 방식의 쉘프로그램을 작성할 때에는 PS3라는 쉘변수를 사용하는 것이 일반적이다.
즉, PS3 쉘변수를 사용하면 PS3에 지정된 메시지를 화면으로 출력하고 사용자의 입력을 기다린다.
select 문이 실행되면 in 다음의 메뉴리스트에 번호를 붙여서 화면으로 출력한다.
그리고 선택된 번호가 지정되면 변수에 메뉴리스트에서 선택된 해당 리스트를 저장한 다음 “do ~ done”의 내용이 실행된다.
이 “do ~ done” 내에는 각 메뉴의 실행에 맞는 명령문들을 작성해 두는데, 이것에 특별한 종료 명령어가 들어 있지 않다면 select 문은 “CTRL+C”를 만날 때까지 계속 반복될 것이다.
아래의 예는 select 문을 이용한 간단한 쉘스크립트이다.
|
|
|
| #!/bin/bash
pg1=w pg2=id pg3=who pg4=date pg5=ls
PS3=“Select NUMBER to run program :”
select systemcheck in $pg1 $pg2 $pg3 $pg4 $pg5 do echo #########$systemcheck COMMAND running ....############### $systemcheck echo echo echo ENTER to list MENU done |
|
|
|
|
위의 쉘스크립트는 pg1부터 pg5까지의 변수를 지정하고 PS3은 지정된 메시지를 화면으로 출력하고 사용자의 입력을 기다린다(PS3=“Select NUMBER to run program :”).
그리고 select 문은 in 다음에 지정된 pg1부터 pg5까지의 메뉴리스트에 번호를 붙여서 화면으로 출력(select systemcheck in $pg1 $pg2 $pg3 $pg4 $pg5)한다.
다음으로 사용자가 선택된 번호가 지정되면 변수에 메뉴리스트에서 선택된 해당 리스트를 저장한 다음 “do ~ done”의 내용이 실행된다.
“do ~ done”에는 “#########$systemcheck COMMAND running ....####### ########”라는 메시지 출력 후에 사용자가 선택한 명령이 실행되고 “ENTER to list MENU” 메시지가 출력된다.
즉, 위 쉘스크립트를 실행하면 1번부터 5번까지의 w, id, who, date, ls 명령어들을 화면에 표시한 후에, 사용자가 번호를 기입하고 <엔터>키를 누르면 해당 명령어가 실행되고 다시 <엔터>키를 누르면 다시 메뉴리스트가 출력되어 사용자의 입력을 기다린다.
⑦ 함수
쉘에서도 함수(function)를 지정할 수 있다.
거의 모든 프로그래밍 언어에서, 코드의 묶음인 함수는 논리적인 이점 혹은 재귀적인 미학에 의해 사용될 수 있다.
함수의 문법은 다음과 같다.
다음은 특정한 이름의 함수를 정의하고, 해당 이름이 나오 때마다 {와 } 사이의 명령문들이 실행된다.
쉘스크립트에서 함수는 어떤 특별한 명령을 통해 선언될 필요가 없다
|
|
|
| function 이름() { 처리할 명령문들 } |
|
|
|
|
다음은 가장 간단한 함수의 예이다.
|
|
|
| #!/bin/bash
function hello { echo Hello World! }
hello hello |
|
|
|
|
이 쉘스크립트는 함수 이름을 hello로 하였고, 이에 따라 hello가 호출되면 “Hello World!”를 출력한다.
이 쉘스크립트는 hello를 두 번 호출하여 Hello World!를 두 번 출력한다.
다음은 두 개의 함수가 사용된 예이다.
|
|
|
| #!/bin/bash
function quit { exit }
function hello { echo Hello! }
hello quit echo foo |
|
|
|
|
위 예에서 2번째 줄에서 4번째 줄은 quit라는 함수를, 5번째 줄에서 7번째 줄은 hello라는 함수를 포함한다.
이 쉘스크립트는 먼저 hello를 호출하고 그 다음에 quit 함수를 호출한다.
그리고 quit 함수에서 exit 명령이 실행되어 쉘스크립트가 종료되기 때문에 이 쉘스크립트 마지막 줄의 “echo too”는 실행되지 않는다.
관련자료
-
이전
-
다음