셸 스 크 립 트 프로 그래 밍 함수
4003 단어 함수.shell셸 스 크 립 트 프로 그래 밍
프로 세 스 프로 그래 밍: 코드 재 활용
모듈 화 프로 그래 밍
구조 화 프로 그래 밍
독립 된 기능 의 코드 를 하나의 전체 로 하고 하나의 이름 으로 한다.이름 이 붙 은 코드 세그먼트 입 니 다. 이것 은 함수 입 니 다.
메모: 함 수 를 정의 하 는 코드 세그먼트 는 자동 으로 실행 되 지 않 습 니 다. 호출 할 때 실 행 됩 니 다.호출 함수 란 코드 에 함수 이름 을 지정 하면 됩 니 다.
함수 이름 이 나타 나 는 모든 위 치 는 코드 가 실 행 될 때 함수 코드 로 자동 으로 대 체 됩 니 다.
문법 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
예를 들어 urlopen의 데이터 사용법데이터 매개 변수는 선택할 수 있습니다. 데이터를 추가하려면 바이트 인코딩 형식의 내용, 즉bytes 형식이면bytes () 함수를 통해 전환할 수 있습니다. 또한 이 데이터 매개 변수를 전달하면 GET 방식으로 요...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.