눈바래다

0025. 함수

IT2015. 6. 30. 16:04

함수는 호출되기전에 정의가 미리 이루어져야 한다.

Korn shell 함수는 function 키워드와 함수이름으로 정의 된다.

중괄호 양측에 모두 space 줘야 한다

export FPATH=directory

FPATH 설정해야 함수사용 가능하다.

function function_name { command; command; }

function usage {

print "Usage $0[-y][-g]; exit 1"

}

함수리스팅과 설정해제

함수정의 부분을 출력시키려면 typeset -f 코맨드를 사용한다

export 함수정의를 출력시키려면 typeset -fx 코맨드 사용한다

함수정의를 설정해제 시키려면 unset -f function_name

로컬변수와 리턴값

typeset 코맨드는 로컬변수를 생성시키기 위해 사용한다

함수의 리턴값은 가장 최금 실행된 코맨드의 status 값을 리턴한다

return 값이 특정 값이 주어지면 (0~255) ? 변수에 저장된다.

#!/bin/ksh

function increment {

typeset sum #local 변수설정

(( sum = $1 + 1 ))

return $sum

}

print -n "The sum is "

increment $1

print $? #local 변수라서 값이 출력되지 않는다

print $sum

$increment 6

리턴값 7

$incremant 255

리턴값 0

#!/bin/ksh

function square {

 (( sq = $1 * $1 ))

 print "Number to be squared is $1."

 print "The result is $sq"

}

read number?"Give me a number to square"

value_returned = $(square) #함수대체

print $value_returned

$ ksh -x square

+ read number?Give me a number to square :

Give me a number to square : 5

+ square

square:  sq =  +  : 많은 토큰들이 와야 합니다

+ rtn = 5

square[10]: rtn: 찾을 없음

+ print


'IT' 카테고리의 다른 글

0027. [ typeset ] ksh typeset 과 함수옵션  (0) 2015.06.30
0026. [ bc ] bc scale 로 계산하기  (0) 2015.06.30
0024. export 된 함수  (0) 2015.06.30
0023. [ IFS ] IFS 와 필드  (0) 2015.06.30
0022. 배열  (0) 2015.06.30

0024. export 된 함수

IT2015. 6. 30. 16:02

함수를 typeset 코맨드로 ENV 파일에서 정의하지 않는한 서브 shell 의해 함수정의가 상속될수 없다

typeset -fx function_names, typeset -fx 코맨드를 사용해서 함수를 현재 Korn Shell 에서 스크립트나 하나의 스크립트에서 다른 스크립트로 엑스포트 시킬수 있다.

#!/bin/ksh

function sayit {

print "How are you $1

}

typeset -fx sayit

sayit Tommy

print "Going to other script"

usage

other_scr

print "Back in calling script"

print "In other script"  #첫문장에 매직넘버 #!/bin/ksh 쓰면 안된다

sayit DAM

print "Returning to calling script"


'IT' 카테고리의 다른 글

0026. [ bc ] bc scale 로 계산하기  (0) 2015.06.30
0025. 함수  (0) 2015.06.30
0023. [ IFS ] IFS 와 필드  (0) 2015.06.30
0022. 배열  (0) 2015.06.30
0021. 의사시그널 pseudo  (0) 2015.06.30

0023. [ IFS ] IFS 와 필드

IT2015. 6. 30. 16:01

#!/bin/ksh

names=Horany:Kidrany:Herbever

OLDIFS="$IFS"

IFS=":"

for person in $names

do

 print Hi $person

done

IFS="$OLDIFS"

set JILL JAM KIM

for girl in $*

do

 print HOWDY $girl

done


'IT' 카테고리의 다른 글

0025. 함수  (0) 2015.06.30
0024. export 된 함수  (0) 2015.06.30
0022. 배열  (0) 2015.06.30
0021. 의사시그널 pseudo  (0) 2015.06.30
0020. 시그널 트래핑  (0) 2015.06.30

0022. 배열

IT2015. 6. 30. 16:01

Korn Shell 배열은 1차원 배열로 1,024개의 요소를 가질수 있다. 이때 인덱스는 0 부터 시작한다.

set -A 배열이름 배열요소

명령 으로도 설정 가능하다.

$array[0]=horany

$array[1]=kidrany

$array[2]=herbever

$print ${array[0]}

$print ${array[1]}

$print ${array[2]}

$print ${array[*]}

$print ${#array[*]}

$typeset -i ints[4]

$ints[0]=50

$ints[1]=75

$ints[2]=100

$ints[3]=happy

ksh: happy:bat number

typeset 코맨드가 4개의 정수형 숫자를 요소로 하는 배열을 생성시킨다

set 코맨드로 배열생성 -A 옵션 다음에 나오는 첫번째 워드는 배열의 이름이다. 그리고 나머지 워드들은 배열의 요소들이 된다

$set -A fruit apples pears peaches

$print ${fruit[0]}

$print ${fruit[1]}

$print ${fruit[*]}

$fruit[1]=plums

$print ${fruit[*]}


'IT' 카테고리의 다른 글

0024. export 된 함수  (0) 2015.06.30
0023. [ IFS ] IFS 와 필드  (0) 2015.06.30
0021. 의사시그널 pseudo  (0) 2015.06.30
0020. 시그널 트래핑  (0) 2015.06.30
0019. [ trap ] trap 시그널 예제  (0) 2015.06.30

0021. 의사시그널 pseudo

IT2015. 6. 30. 16:00

의사시그널은 실제 시그널이 아니지만 shell 프로그램을 디버깅하기 위해서 생성된다

trap 코맨드는 의사코맨드를 실제 시그널 처럼 처리해 준다.

시그널 설정해제

시그널은 디폴트로 리셋시키기 위해서는 trap 코맨드 다음에 시그널 이름이나 번호가 와야 한다.

trap 2

trap INT

시그널 2 SIGINT 리셋시킨다

시그널은 control-C 키기 눌러질때 프로세스를 종료 시킨다(kill)

시그널무시

trap 코맨드 다음에 한쌍의 인용부호가 오면 리스팅된 시그널이 무시된다.

trap " " 1 2

trap "" HUP INT

시그널 1 2 shell 의해 무시된다.

트랙리스팅 trap 입력하면 모든 트랩과 이들에 지정된 코맨드가 리스트로 출력된다.


'IT' 카테고리의 다른 글

0023. [ IFS ] IFS 와 필드  (0) 2015.06.30
0022. 배열  (0) 2015.06.30
0020. 시그널 트래핑  (0) 2015.06.30
0019. [ trap ] trap 시그널 예제  (0) 2015.06.30
0018. [ trap ] trap 의사signal 예제  (0) 2015.06.30