셸 고급 프로 그래 밍 - 셸 함수 1 편 (총 2 편)
다음 두 편 은 셸 함수 여행 을 시작 합 니 다.
#
function_name ()
{
# ,
commands...
# ,return 。 return , ; return , return n(0-255)
[ return int ; ]
}
물론 원 하신 다 면 함수 명 앞 에 키워드 function 을 추가 할 수 있 습 니 다. 이것 은 개인 적 인 취향 에 따라 추가 할 수 있 습 니 다.
한 줄 에서 함 수 를 정의 할 수도 있 습 니 다. 이때 함수 체 내의 각 명령 사이 에는 반드시 분 호 를 사용 해 야 합 니 다.격 리, 문법 은 다음 과 같다.
function name { command; command2; commandN; }
함수 의 매개 변수/변수 와 반환 값함수 에 매개 변수 전달:
name () {
arg1=$1
arg2=$2
command on $arg1
}
함 수 는 자신의 명령 행 인자 가 있 습 니 다. 위치 매개 변 수 를 사용 하여 전달 하 는 매개 변 수 를 방문 하여 호출 함 수 를 사용 합 니 다.
name foo bar
#!/bin/bash
#====================================
#
# FIREL:passed.sh
# AUTHOR:Xie_qi_chao
# CREATED:20/03/2019
#
#====================================
passed () {
a=$1
echo "passed(): \$0 is $0"
echo "passed(): \$1 is $1"
echo "passed(): \$a is $a"
echo "passed(): total args passed to me $#"
echo "passed(): all args (\$@) passed to me -\"$@\""
}
echo "**** calling passed() first time ****"
passed one
echo "**** calling passed() second time ****"
passed one two three
실행 결 과 를 살 펴 보 자.
[root@xieqc ~]# sh passed.sh
**** calling passed() first time ****
passed(): $0 is passed.sh
passed(): $1 is one
passed(): $a is one
passed(): total args passed to me 1
passed(): all args ($@) passed to me -"one"
**** calling passed() second time ****
passed(): $0 is passed.sh
passed(): $1 is one
passed(): $a is one
passed(): total args passed to me 3
passed(): all args ($@) passed to me -"one two three"
로 컬 변 수 를 정의 합 니 다.
#!/bin/bash
#AUTHOR:Xie_qi_chao
#TIME:20/03/2019
d=/tmp/diskusage.log
create_logfile () {
local d=$1
echo "create_logfile():d is set to $d"
}
d=/tmp/diskusage.log
echo "Before calling create_logfile d is set $d"
create_logfile "/home/haha/diskusage.log"
echo "after calling create_logfile d is set to $d"
출력 결과 보기:
[root@xieqc shell]# sh localfvar.sh
Before calling create_logfile d is set /tmp/diskusage.log
create_logfile():d is set to /home/haha/diskusage.log
after calling create_logfile d is set to /tmp/diskusage.log
위의 밤 에서 알 수 있 듯 이 local 명령 이 정의 하 는 변 수 는 스 크 립 트 내부 에서 만 유효 하 며 국부 변 수 를 위 한 것 으로 위의 스 크 립 트 와 결합 하여 종합 적 으로 비교 할 수 있 습 니 다.부분 변 수 는 함수 내부 에서 만 유효 하 며 전체 변 수 는 스 크 립 트 전체 에서 유효 합 니 다. 주로 local 명령 으로 부분 변 수 를 정의 하 는 지 여부 입 니 다.
현재 함수 명 FUNCNAME
작업 중 에 스 크 립 트 가 매우 길 고 많은 함 수 를 포함 하 며 함수 가 서로 호출 될 수 있 습 니 다. 가끔 스 크 립 트 를 디 버 깅 할 때 스 크 립 트 가 그 함수 로 실 행 됩 니 다. 어떻게 해 야 할 지 모 르 겠 습 니 다. FUNCNAME 를 이용 하면 스 크 립 트 가 호출 하 는 함수 '궤적' 을 알 수 있 습 니 다. 호출 함수 호출 함 수 를 보고 함수 궤적 을 표시 하 는 밤 을 볼 수 있 습 니 다.
#!/bin/bash
function fun_1
{
echo "Now ,function name is $FUNCNAME"
declare -p FUNCNAME
}
function fun_2
{
echo "Now,function name is $FUNCNAME"
declare -p FUNCNAME
fun_1
}
fun_2
실행 결 과 를 살 펴 보 자.
[root@xieqc shell]# sh fun_FUNCNAME.sh
Now,function name is fun_2
declare -a FUNCNAME='([0]="fun_2" [1]="main")'
Now ,function name is fun_1
declare -a FUNCNAME='([0]="fun_1" [1]="fun_2" [2]="main")'
위의 실행 결 과 를 통 해 스 크 립 트 가 실행 하 는 함수 호출 을 뚜렷하게 볼 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.