셸 스 크 립 트 프로 그래 밍 함수

함수: function 
  프로 세 스 프로 그래 밍: 코드 재 활용
    모듈 화 프로 그래 밍
    구조 화 프로 그래 밍 
독립 된 기능 의 코드 를 하나의 전체 로 하고 하나의 이름 으로 한다.이름 이 붙 은 코드 세그먼트 입 니 다. 이것 은 함수 입 니 다.
메모: 함 수 를 정의 하 는 코드 세그먼트 는 자동 으로 실행 되 지 않 습 니 다. 호출 할 때 실 행 됩 니 다.호출 함수 란 코드 에 함수 이름 을 지정 하면 됩 니 다.
함수 이름 이 나타 나 는 모든 위 치 는 코드 가 실 행 될 때 함수 코드 로 자동 으로 대 체 됩 니 다.
    문법 1:
function  f_name  {
함수 체
}
    문법 2:
f_name()  {
함수 체
}
함수 의 생명주기: 호출 될 때마다 만 들 고 되 돌아 올 때 종료 합 니 다.
그 상 태 는 함수 체 에서 실 행 된 마지막 명령 의 상태 결 과 를 되 돌려 줍 니 다.
사용자 정의 상태 반환 값, 사용 필요: return
return [0-255]
0: 성공
- 255: 실패
예제: 사용자 이름 을 지정 하여 사용자 의 id 번호 와 기본 셸 을 가 져 옵 니 다.
#!/bin/bash
#
userinfo() {
    if id "$username" &> /dev/null; then
    grep "^$username\>" /etc/passwd | cut -d: -f3,7
    else
    echo "No such user."
    fi
}
username=$1
userinfo
username=$2
userinfo

예시 2: 서비스 스 크 립 트 프레임 워 크
#!/bin/bash
#
# chkconfig: - 50 50
# description: test service script
#
prog=$(basename $0)
lockfile=/var/lock/subsys/$prog
start() {
    if [ -f $lockfile ]; then
        echo "$prog is running yet."
    else
        touch $lockfile
        [ $? -eq 0 ] && echo "start $prog finshed."
    fi
}
stop() {
    if [ -f $lockfile ]; then
        rm -f $lockfile
        [ $? -eq 0 ] && echo "stop $prog finished."
    else
        echo "$prog is not running."
    fi
}
status() {
    if [ -f $lockfile ]; then
        echo "$prog is running"
    else
        echo "$prog is stopped."
    fi
}
usage() {
    echo "Usage: $prog {start|stop|restart|status}"
}
case $1 in
    start)
        start ;;
    stop)
        stop ;;
    restart)
        stop
        start ;;
    status)
        status ;;
    *)
        usage
        exit 1 ;;
esac

함수 반환 값:
함수 의 실행 결과 반환 값:
     (1) echo 또는 printf 명령 으로 출력 하기;
     (2) 함수 체 에서 호출 된 명령 의 실행 결과;
함수 의 종료 상태 코드:
     (1) 기본 값 은 함수 체 에서 실 행 된 마지막 명령 의 종료 상태 코드 에 달 려 있 습 니 다.
     (2) 사용자 정의: return
함 수 는 인 자 를 받 아들 일 수 있 습 니 다:
    전달 매개 변수 함수:
    함수 체 에서 $1, $2 를 사용 할 수 있 습 니 다. 함수 에 전 달 된 인 자 를 참조 할 수 있 습 니 다.또한 함수 에서 $* 또는 $@ 을 사용 하여 모든 매개 변 수 를 참조 할 수 있 습 니 다. $\# 전달 하 는 매개 변수의 개 수 를 참조 할 수 있 습 니 다.
    함 수 를 호출 할 때 함수 이름 뒤에 주어진 매개 변수 목록 을 공백 문자 로 구분 하면 됩 니 다. 예 를 들 어 testfunc. arg1 arg2 arg3 ...
예제: 10 명의 사용 자 를 추가 합 니 다.
사용자 의 기능 을 추가 하여 함 수 를 사용 하여 사용자 이름 을 매개 변수 로 함수 에 전달 합 니 다.
#!/bin/bash
#
# 5: user exists
addusers() {
    if id $1 &> /dev/null; then
        return 5
    else
        useradd $1
        retval=$?
        return $retval
    fi
}
for i in {1..10}; do
    addusers ${1}${i}
    retval=$?
    if [ $retval -eq 0 ]; then
        echo "Add user ${1}${i} finished."
    elif [ $retval -eq 5 ]; then
        echo "user ${1}${i} exists."
    else
        echo "Unkown Error."
    fi
done

변수 역할 영역:
부분 변수: 역할 영역 은 함수 의 생명 주기 입 니 다.함수 가 끝 날 때 자동 으로 소각 되 기;
부분 변 수 를 정의 하 는 방법: local VARIABLE = VALUE
로 컬 변수: 역할 영역 은 스 크 립 트 를 실행 하 는 셸 프로 세 스 의 수명 주기 입 니 다.따라서 그 역할 범 위 는 현재 셸 스 크 립 트 프로그램 파일 입 니 다.
예제 프로그램:
#!/bin/bash
#
name=tom
setname() {
    local name=jerry
    echo "Function: $name"
}
setname
echo "Shell: $name"

함수 귀속:
함수 가 직접 또는 간접 적 으로 자신 을 호출 합 니 다.
사례: 다음 과 같은 기능 실현
10!=10*9!=10*9*8!=10*9*8*7!=...
n
n*(n-1)!=n*(n-1)*(n-2)!=
#!/bin/bash
#
fact() {
    if [ $1 -eq 0 -o $1 -eq 1 ]; then
        echo 1
        else
        echo $[$1*$(fact $[$1-1])]
    fi
}
fact $1

다음 수열 구현:
1,1,2,3,5,8,13,21,...
#!/bin/bash
#
fab() {
if [ $1 -eq 1 ]; then
        echo -n "1 "
    elif [ $1 -eq 2 ]; then
        echo -n "1 "
    else
        echo -n "$[$(fab $[$1-1])+$(fab $[$1-2])] "
fi
}
for i in $(seq 1 $1); do
    fab $i
done
echo

좋은 웹페이지 즐겨찾기