블로그 이미지
progh2
지루한 것에서 벗어나 재미난 것 속으로 풍덩~☆

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

Recent Post

Recent Comment

Archive

쉘 프로그래밍 - 함수, 내장명령, 명령결과, heredocument
함수
[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 variable
local 키워드를 사용하면 전역변수와 별개의 지역변수를 쓸 수 있다.
[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]
posted by progh2