유 닉 스 셸 사용자 정의 함수 소개 및 사용
매개 변수 가 없 는 함수 로 일부 기능 을 직접 호출 합 니 다.
함 수 는 스 크 립 트 에 작성 되 어 다른 명령 과 함께 저장 되 지만 함 수 는 스 크 립 트 의 시작 부분 에 정의 해 야 합 니 다.
즉, 함 수 를 포함 하 는 스 크 립 트 에서 모든 함 수 는 스 크 립 트 의 시작 부분 에 정의 해 야 합 니 다.
그리고 함 수 를 정의 한 후에 호출 하거나 다른 스 크 립 트 에서 이 정 의 된 함 수 를 참조 합 니 다.
실례 1. 다음은 간단 한 사용자 정의 함수 입 니 다. 1 부터 10 까지 의 합 을 구하 십시오.
스 크 립 트 실행:
sh no_param_test
1
2
3
4
5
6
7
8
9
10
Sum:55
2. 유 참 함수
매개 변 수 를 가 진 사용자 정의 함수, 고급 언어 (예 를 들 어 C, JAVA, C\# 등) 에서 매개 변 수 는 모두 함수 뒤의 괄호 안에 있 습 니 다.
셸 에 서 는 함수 내 에서 매개 변수 개 수 를 검사 합 니 다.함 수 를 호출 할 때 바로 뒤에서 파 라 메 터 를 따라 가면 됩 니 다.
매개 변수 가 몇 개 든 함수 명 뒤에 바짝 붙 어 있다.
1. 단일 매개 변수
인 스 턴 스 2, 스 크 립 트 는 다음 과 같 습 니 다.
pg no_param_test
#!/bin/ksh
#
# author:_yeeXun
# date :2013-3-4 8:37:29
no_param_test() {
SUM=0
#for i in { 1..10 }
for i in 1 2 3 4 5 6 7 8 9 10
do
echo $i
SUM=`expr $SUM + $i`
i=`expr $i + 1`
if [ $i -eq 11 ]; then
echo "Sum:$SUM"
fi
done
}
no_param_test
# EOF
이 함수 에서\# check params 부분 은 매개 변수 검 사 를 하고 있 습 니 다. 여기 $\# 입력 한 매개 변수 개 수 를 표시 합 니 다.다음은 이 스 크 립 트 를 실행 합 니 다:
sh direc_check Enter destination directory: test * * * * * * * test does not exist... creating it now * * * * * * * * * * * 다시 실행 할 때 같은 이름 을 입력 하면 이 디 렉 터 리 가 이미 존재 함 을 알려 줍 니 다.sh direc_check Enter destination directory:test test is a directory and exists in/usr/b4nx/user/ytcclb
현재 디 렉 터 리 에서 이 스 크 립 트 를 통 해 만 든 디 렉 터 리 를 awk 언어 로 볼 수 있 는 디 렉 터 리 를 추가 합 니 다.
pg direc_check
#!/bin/ksh
is_directory() {
_DIR_NAME=$1
# check params
if [ $# -lt 1 ]; then
echo "is_directory:I need a directory name to check"
return 1
fi
# check
if [ ! -d $_DIR_NAME ]; then
return 1
else
return 0
fi
}
error_msg() {
echo "**********"
echo $@
echo "**********"
return 0
}
echo -n "Enter destination directory:"
read DIR
if is_directory $DIR
then
echo "$DIR is a directory and exists in $PWD"
else
error_msg "$DIR does not exist ... creating it now"
mkdir $DIR > /dev/null 2>&1
if [ $? -ne 0 ]; then
error_msg "Could not create directory::chech it out!"
exit 1
else :
fi
fi
# author:_yeeXun
# date :2013-3-2 15:27:57
# EOF
2. 여러 개의 매개 변수
하나의 매개 변수 든 여러 개의 매개 변 수 를 검사 하여 판단 합 니 다. 여기 $\# 입력 한 매개 변수 개 수 를 표시 합 니 다.
$1 은 입력 한 첫 번 째 인 자 를 나타 내 고, $2 는 두 번 째 인 자 를 나타 내 며, $3 은 네 번 째 인 자 를 나타 내 는 것 으로 유추 된다.
다음은 문자열 을 캡 처 하 는 함수 입 니 다:
실례 3, pg chop
ls -l | awk '{if($0~/^d/) print $0}'
drwxr-xr-x 2 b4nx group 512 Mar 2 15:32 call_fun_test
drwxr-xr-x 2 b4nx group 512 Mar 2 15:04 test
이 스 크 립 트 는 함수 chop 에서 문자열 을 캡 처 하고 2 개의 인 자 를 각각 $1, $2 로 표시 합 니 다.
$1 은 절 단 된 문자열 을 표시 하고, $2 는 절 단 된 시작 위 치 를 표시 합 니 다.다음 실행: sh chop
Enter the string:string123
Enter the start position:5
ng123
sh chop
Enter the string:_yeexunInCSDN
Enter the start position:10
CSDN
3. 함수 반환 값
함수 의 반환 값 은 실행 함수 의 상 태 를 표시 합 니 다.
1, return 0: 정상 복귀.
2. return 1: 오 류 를 되 돌려 줍 니 다.
3、return :마지막 명령 실행 상태 에서 반환 값 을 결정 합 니 다. $를 사용 할 수 있 습 니까?검사 하 다.
4. 함수 호출 1, 같은 스 크 립 트
스 크 립 트 에서 함 수 는 스 크 립 트 가 시작 되 자마자 정의 되 어야 호출 할 수 있 습 니 다.
같은 스 크 립 트 에서 맨 위 에 함 수 를 정의 하고 정의 한 후에 호출 합 니 다. 예 를 들 어 인 스 턴 스 1, 인 스 턴 스 2, 인 스 턴 스 3.
2. 각본 간
이 함수 들 을 같은 스 크 립 트 에 정의 하여 공공 적 으로 사용 하 는 함수 스 크 립 트 로 정의 한 다음 호출 해 야 할 스 크 립 트 에서 이 스 크 립 트 를 참조 하면 됩 니 다.
인용 방식 은 다음 과 같다. < dot > < space > < directory > < script >
인 스 턴 스 4, 함수 호출 - 크로스 스 크 립 트
함수 스 크 립 트:
#!/bin/ksh
# chop
# to call:chop string how_many_chars_to_chop
chop() {
_STR=$1
_CHOP=$2
# awk's substr starts at 0,wo need to increment by one
CHOP=`expr $_CHOP + 1`
# check we have two params
if [ $# -ne 2 ]; then
echo "check_length:I need a string and how many characters to chop"
return 1
fi
# check the length of the string first
_LENGTH=`echo $_STR | awk '{print length($0)}'`
if [ "$_LENGTH" -lt "$_CHOP" ]; then
echo "The length of the string is short"
return 1
fi
echo $_STR | awk '{print substr($1,'$_CHOP')}'
}
# call the function
echo -n "Enter the string:"
read STR
echo -n "Enter the start position:"
read LEN
chop $STR $LEN
# author:_yeeXun
# date :2013-3-2 14:17:34
# EOF
이 스 크 립 트 의 함수 스 크 립 트 를 호출 합 니 다:
pg direc_check.sh
#!/bin/ksh
is_directory() {
_DIR_NAME=$1
# check params
if [ $# -lt 1 ]; then
echo "is_directory:I need a directory name to check"
return 1
fi
# check
if [ ! -d $_DIR_NAME ]; then
return 1
else
return 0
fi
}
error_msg() {
echo "**********"
echo $@
echo "**********"
return 0
}
# ::<<' ... '
:<<'
echo -n "Enter destination directory:"
read DIR
if is_directory $DIR
then
echo "$DIR is a directory and exists in $PWD"
else
error_msg "$DIR does not exist ... creating it now"
mkdir $DIR > /dev/null 2>&1
if [ $? -ne 0 ]; then
error_msg "Could not create directory::chech it out!"
exit 1
else :
fi
fi
'
# author:_yeeXun
# date :2013-3-2 15:27:57
# EOF
존재 하 는 디 렉 터 리 를 입력 할 때: sh funtest
Enter destination directory:test
test is a directory and exists in/usr/b4nx/user/ytcclb
존재 하지 않 는 디 렉 터 리 이름 입력:
sh fun_test Enter destination directory:dir_test ********** dir_test does not exist ... creating now **********
현재 디 렉 터 리 아래 의 모든 디 렉 터 리 이름 보기:
pg fun_test
#!/bin/ksh
# call the function outside the script is_drectory
# <dot><space><directory with functions><script with functions>
. $HOME/user/ytcclb/direc_check.sh
echo -n "Enter destination directory:"
read DIR
if is_directory $DIR
then
echo "$DIR is a directory and exists in $PWD"
else
error_msg "$DIR does not exist ... creating now"
mkdir $DIR > /dev/null 2>&1
if [ $? -ne 0 ]; then
error_msg "Could not create directory::check it out"
exit 1
else :
fi
fi
# author:_yeeXun
# date :2013-3-2 15:49:12
# EOF
--the end--
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.