Shell 함수 의 정의, 실행, 전송 및 재 귀 함수

2897 단어 shell

Bash(Bourne Again 셸) 도 다른 프로 그래 밍 언어 와 마찬가지 로 함 수 를 지원 합 니 다. 일반적으로 대형 스 크 립 트 를 작성 하 는 데 필요 합 니 다. 셸 스 크 립 트 프로그램 을 하나의 기능 이 상대 적 으로 독립 된 코드 블록 으로 나 누 어 코드 의 모듈 화 를 더욱 잘 하고 구조 가 뚜렷 하 며 프로그램의 코드 량 을 효과적으로 줄 일 수 있 습 니 다.그러나 bash 는 해석 적 인 언어 로 서 bash 가 프로 그래 밍 능력 에 있어 서 제공 하 는 지원 은 다른 컴 파일 적 인 언어 (예 를 들 어 C 언어) 처럼 완선 되 지 않 고 집행 효율 도 매우 낮 을 것 이다.
셸 함수 의 정의, 실행 및 전달
정의.
서식 1
function name() {
 Command sequence(    );
}

서식 2
name() {
 Command sequence(    );
}
function name() 정 의 를 가 져 올 수도 있 고 직접 name() 정의 할 수도 있 으 며 어떠한 매개 변수 도 가지 고 있 지 않다. 
집행 하 다.
name;

함수 이름 을 직접 사용 하면 어떤 함 수 를 호출 할 수 있다.
전달 매개 변수
#!/bin/bash
aa="this is aa"
bb="this is bb"
function name() {                  #    name
        local cc="this is cc"      #      $cc
        local dd="this is dd"      #      $dd
        echo $aa, $bb              #    1   2
        echo $cc                   #      
        return 0                   #shell        ,   0~257  。
}

echo $dd                           #         ,  dd     。
name                               #    name

상례 중:
aa 와 bb 는 전역 변 수 를 정의 합 니 다.
cc 와 dd 는 부분 변 수 를 정의 합 니 다. 함수 name 에서 만 사용 할 수 있 습 니 다. $aa 는 첫 번 째 매개 변수 $1 이 고 $bb 는 첫 번 째 매개 변수 $2 이 며 이런 유추 $n 는 n 번 째 매개 변수 $n 이다. return 0 매개 변 수 를 되 돌려 줍 니 다. 추가: return 를 표시 할 수 있 습 니 다. 추가 하지 않 으 면 마지막 명령 으로 결 과 를 되 돌려 줍 니 다.
역귀 함수
bash 도 재 귀 함수 (자신의 함 수 를 호출 할 수 있 음) 를 지원 합 니 다. 예 를 들 어:
#!/bin/bash

function name() {
        echo $1
        name hello
        sleep 1
}
name

이 스 크 립 트 를 실행 한 후 hello 를 계속 인쇄 하고 Ctrl+C 누 르 면 끝 납 니 다.
포크 폭탄
아마도 많은 사람들 이 fork 폭탄 을 들 어 본 적 이 있 을 것 입 니 다. 이것 은 실제 적 으로 매우 간단 한 재 귀 프로그램 일 뿐 입 니 다. 프로그램 이 하 는 일 은 똑 같 습 니 다. 이 재 귀 함 수 는 자신 을 호출 하고 새로운 프로 세 스 를 만 들 수 있 습 니 다. 이 간단 한 프로그램 은 시스템 안의 모든 자원 을 신속하게 소모 하여 서비스 거부 공격 을 초래 할 수 있 습 니 다.
.()
{
.|.&
}
;
.

첫 번 째 줄 은 다음 에 함 수 를 정의 하려 고 합 니 다. 함수 이름 은 소수점 이 고 선택 할 수 있 는 매개 변수 가 없습니다.
두 번 째 줄 은 함수 체 의 시작 을 나타 낸다.
세 번 째 줄 은 함수 체 가 진정 으로 해 야 할 일 입 니 다. 먼저 이 함 수 를 재 귀적 으로 호출 한 다음 파 이 프 를 이용 하여 새로운 프로 세 스 를 호출 합 니 다.
네 번 째 줄 은 함수 체 의 끝 을 나타 낸다.
다섯 번 째 줄 은 명령 행 에서 두 명령 을 구분 하 는 데 사용 되 는 동작 을 수행 하지 않 습 니 다.전체적으로 보면 이 프로그램 은 두 부분 을 포함 하고 먼저 하나의 함 수 를 정의 한 다음 에 이 함 수 를 호출 한 다 는 것 을 나타 낸다.
여섯 번 째 줄 은 이 함 수 를 호출 하 는 것 을 나타 낸다.

좋은 웹페이지 즐겨찾기