Linux Shell 의 Shell 함수 호출
1. Shell 에서 함수 의 정의
프로그램 과 관리, 모듈 화 를 편리 하 게 하고 코드 의 중복 을 줄 이기 위해 서 함 수 는 정말 좋 은 것 입 니 다.셸 에서 함수 의 정 의 는 두 가지 방법 이 있 는데 다음 과 같다.
function fname()
{
statements;
}
혹시
fname()
{
statements;
}
주의 하 세 요. () 안에 인자 가 없습니다. C 언어 처럼 () 에 인자 가 있 을 수 있 는 것 이 아 닙 니 다.
그러면 여러분 은 답답 할 것 입 니 다. 함수 호출 이 많 든 적 든 항상 매개 변수 가 필요 합 니 다. 그러면 이 매개 변 수 는 어떻게 전달 해 야 합 니까?사실 매개 변수 전달 방식 은 fname 입 니 다.(매개 변 수 를 전달 할 필요 가 없습니다) 또는 fname agr 1 arg 2 (두 개의 매개 변 수 를 전달 해 야 합 니 다).
2. 사용자 정의 함수 의 예
여러분 의 상황 이 어떤 지 모 르 겠 습 니 다. 어쨌든 처음부터 저 는 매우 어색 합 니 다. 왜냐하면 C 언어 에서 예 를 들 어 제 가 함수 int cmp 를 정의 하기 때 문 입 니 다.(int a, int b) 그러면 저 는 함수 에서 함수 헤더 에 명 시 된 변수 a 와 b 를 사용 할 것 입 니 다. 셸 에 서 는 매개 변 수 를 정의 하지 않 습 니 다. 그러면 제 함 수 는 이 두 개의 매개 변 수 를 사용 해 야 합 니 다. 어떻게 해 야 합 니까? 다음은 하나의 예 로 설명 하 겠 습 니 다.
[plain] view plain
copy
print ?
#! /bin/bash
{
while [ $count -lt $1 ];
echo $count;
sleep 1;
return 0;
LoopPrint $n;
#! /bin/bash
# Filename:LoopPrint.sh
function LoopPrint()
{
count=0;
while [ $count -lt $1 ];
do
echo $count;
let ++count;
sleep 1;
done
return 0;
}
read -p "Please input the times of print you want: " n;
LoopPrint $n;
먼저 이 프로그램의 기능 을 말 해 보 세 요. 숫자 n 을 입력 한 다음 0 부터 1 초 간격 으로 숫자 를 입력 하 는 것 입 니 다. 출력 n - 1 까지 입 니 다. 우선 프로그램 은 수학 을 입력 하고 함 수 를 호출 하여 출력 하 는 기능 을 요구 합 니 다.
주석 1 의 한 마디 에 주의 하 십시오. 그 안에 변수 $1 이 있 습 니 다. 함 수 를 호출 할 때 매개 변수의 전달 방식, 즉 fname agr 1 arg 2 를 기억 하 셔 야 합 니 다. 여기 있 는 $1 은 첫 번 째 매개 변 수 를 나타 내 는 것 입 니 다. 이런 식 으로 유추 하면 $2 는 두 번 째 매개 변수 입 니 다. $3 은 세 번 째 매개 변수 이 고 $n 은 두 번 째 매개 변 수 를 나타 내 는 것 입 니 다.
그래서 $1 은 변수 n 의 값 입 니 다. 알 겠 죠?
보충 하 다
$0: 스 크 립 트 자체 의 이름 입 니 다.
$\ #: 스 크 립 트 에 전 달 된 매개 변수 개수 입 니 다.
$@: 스 크 립 트 에 전 달 된 모든 인자 의 목록 입 니 다. 즉, "$1", "$2", "$3" 등 으로 확 장 됩 니 다.
$*: 스 크 립 트 에 전 달 된 모든 매개 변 수 를 하나의 문자열 로 표시 합 니 다. 위치 변수 와 달리 매개 변 수 는 9 개 를 초과 할 수 있 습 니 다. 즉, "$1c $2c $3" 으로 확 장 됩 니 다. 그 중에서 c 는 IFS 의 첫 번 째 문자 입 니 다.
$$: 스 크 립 트 가 실행 중인 현재 프로 세 스 ID 번호 입 니 다.
$?: 마지막 명령 의 종료 상 태 를 표시 합 니 다. 0 은 오류 가 없 음 을 표시 하고 다른 것 은 오류 가 있 음 을 표시 합 니 다.
특히 파 라 메 터 를 전달 할 때 (이 예 에서) LoopPrint $n 이 라 고 써 야 합 니 다. LoopPrint n 이 라 고 쓸 수 없습니다. 왜 요? 예 를 들 어 20 을 입력 하면 n 의 값 ($n) 입 니 다.전 자 는 n 의 값, 즉 20 을 함수 LoopPrint 에 전달 하고 후 자 는 함수 LoopPrint 에 문자 n 을 전달 합 니 다. 이 점 은 정적 언어 에서 함수 매개 변 수 를 전달 하 는 것 과 는 매우 다 릅 니 다. Shell 에서 변수의 사용 은 먼저 정의 할 필요 가 없 기 때문에 변 수 를 사용 하여 Shell 이 변수 임 을 알 리 고 값 을 전달 할 때 $n 을 사용 합 니 다.n 을 직접 사용 할 수 없습니다. 그렇지 않 으 면 n 을 하나의 문자 로 만 처리 할 수 있 습 니 다. 변수 가 아 닙 니 다.
3. 역할 영역 문제
함수 의 역할 영역 은 C / C + 언어 에서 의 역할 제약 과 같 습 니 다. 함수 의 정 의 는 반드시 함수 호출 문 앞 에 나타 나 야 합 니 다. 그러나 C / C + + 와 다른 것 은 변수의 역할 영역 문제 입 니 다. 본인 의 시험 을 통 해 주석 1 의 문 구 를 while [$count - lt $로 바 꿉 니 다.
n ];또한 가능 합 니 다. 즉, 함수 가 이 파일 에 나타 난 모든 변 수 를 사용 할 수 있 습 니 다. 그러나 저 는 상기 예 에서 의 방법, 즉 while [$count - lt $1] 을 사용 하 는 것 을 권장 합 니 다.또한 함수 중의 변수 이외 의 변 수 를 함부로 사용 하지 마 세 요. 함수 호출 시 함수 밖 에 어떤 변수 가 존재 하 는 지 모 르 고 그 값 이 무엇 인지 모 르 기 때 문 입 니 다. 다른 사람 이 당신 의 함 수 를 사용 할 때 당신 이 함수 에서 사용 하 는 변 량 명 을 전달 할 것 이 라 고 보장 할 수 없습니다. 예 를 들 어 n. 다른 사람 이 사용 할 때 전달 할 수 있 는 것 은 바로 그 가 정의 한 변수 입 니 다. 예 를 들 어등급 을 계산 하 다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.