2004. 7. 18. 22:36
기술문서창고/리눅스 프로그래밍
쉘 프로그래밍 - 함수, 내장명령, 명령결과, heredocument
함수
local 키워드를 사용하면 전역변수와 별개의 지역변수를 쓸 수 있다.
yes_or_no 로 파라미터를 넘기는 것과 넘겨진 것의 변화를 살펴본다. 또한 함수의 반환값을 if에 사용한 것도 주의.
함수
[CODE]function_name () {
statements
}[/CODE]
함수를 호출하기 위해서는 항상 함수를 먼저 정의해야 한다. 함수가 호출될 때 스크립트의 위치 파라미터 $*, $@, $#, $1, $2 ... 등은 함수에 대한 파라미터에 의해 대체된다. 이게 함수로 전달된 파라미터를 읽어들이는 방법이며 함수가 끝날 때 이전 파라미터로 값이 복원된다. 또한 return 명령을 사용하여 함수가 숫자값을 반환하게 할 수 있다. 함수가 스트링을 반환하게 하는 일반적인 방법은 함수가 끝난 후에도 사용할 수 있도록 스트링을 변수에 저장하게 하는 방법이 있다.[CODE]#!/bin/bash
foo() { ls -al asd *
return
}
result=$(foo)
for keyword in $result
do
echo $keyword
done[/CODE]
결과[CODE]ls: asd: 그런 파일이나 디렉토리가 없음
-rwxr-xr-x
1
progh2
progh2
25
7월
18
19:34
a.sh
-rwxr--r--
1
progh2
progh2
304
7월
18
21:54
andor.sh
[/CODE]
local variablelocal 키워드를 사용하면 전역변수와 별개의 지역변수를 쓸 수 있다.
[CODE]#!/bin/sh
sample_text="global variable"
foo() {
local sample_text="local variable"
echo "function foo is executing"
echo $sample_text
smaple_text="also this is local variable"
echo $sample_text
}
echo "script starting"
echo $sample_text
foo
echo "script ended"
echo $sample_text
exit 0[/CODE]
파라미터 전달 예 yes_or_no 로 파라미터를 넘기는 것과 넘겨진 것의 변화를 살펴본다. 또한 함수의 반환값을 if에 사용한 것도 주의.
[CODE]#!/bin/bash
yes_or_no() {
echo "Is your name $* ?"
while true
do
echo -n "Enter yes or no: "
read x
case "$x" in
y | yes ) return 0;;
n | no ) return 1;;
* ) echo "Answer yes or no"
esac
done
}
echo "Original parameters are $*"
if yes_or_no "$1"
then
echo "Hi $1, nice name"
else
echo "Oh, never mind."
fi
exit 0[/CODE]