Unix / Linux-쉘 기능

이 장에서는 쉘 기능에 대해 자세히 설명합니다. 함수를 사용하면 스크립트의 전체 기능을 더 작은 논리적 하위 섹션으로 나눈 다음 필요할 때 개별 작업을 수행하도록 호출 할 수 있습니다.

기능을 사용하여 반복적 인 작업을 수행하는 것은 code reuse. 이것은 현대 객체 지향 프로그래밍 원칙의 중요한 부분입니다.

쉘 함수는 다른 프로그래밍 언어의 서브 루틴, 프로 시저 및 함수와 유사합니다.

함수 생성

함수를 선언하려면 다음 구문을 사용하십시오.

function_name () { 
   list of commands
}

함수의 이름은 function_name, 그리고 그것은 스크립트의 다른 곳에서 호출하는 데 사용할 것입니다. 함수 이름 뒤에는 괄호와 중괄호로 묶인 명령 목록이 와야합니다.

다음 예제는 함수의 사용을 보여줍니다-

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World"
}

# Invoke your function
Hello

실행하면 다음과 같은 출력이 표시됩니다.

$./test.sh
Hello World

함수에 매개 변수 전달

함수를 호출하는 동안 매개 변수를 허용하는 함수를 정의 할 수 있습니다. 이러한 매개 변수는 다음과 같이 표시됩니다.$1, $2 등등.

다음은 두 개의 매개 변수 ZaraAli를 전달한 다음 함수에서 이러한 매개 변수를 캡처하여 인쇄하는 예입니다.

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
}

# Invoke your function
Hello Zara Ali

실행하면 다음과 같은 결과를 받게됩니다.

$./test.sh
Hello World Zara Ali

함수에서 값 반환

실행하면 exit 함수 내부에서 명령을 실행하면 그 효과는 함수의 실행을 종료 할뿐만 아니라 함수를 호출 한 쉘 프로그램의 실행을 종료하는 것입니다.

대신 함수의 실행을 종료하고 싶다면 정의 된 함수에서 나올 수있는 방법이 있습니다.

상황에 따라 다음을 사용하여 함수에서 값을 반환 할 수 있습니다. return 구문이 다음과 같은 명령-

return code

여기 code 여기에서 선택하는 것은 무엇이든 될 수 있지만 스크립트 전체에서 의미 있거나 유용한 것을 선택해야합니다.

다음 함수는 값 10을 반환합니다-

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
   return 10
}

# Invoke your function
Hello Zara Ali

# Capture value returnd by last command
ret=$?

echo "Return value is $ret"

실행하면 다음과 같은 결과를 받게됩니다.

$./test.sh
Hello World Zara Ali
Return value is 10

중첩 함수

함수의 더 흥미로운 기능 중 하나는 자신과 다른 함수를 호출 할 수 있다는 것입니다. 자신을 호출하는 함수는recursive function.

다음 예제는 두 함수의 중첩을 보여줍니다.

#!/bin/sh

# Calling one function from another
number_one () {
   echo "This is the first function speaking..."
   number_two
}

number_two () {
   echo "This is now the second function speaking..."
}

# Calling function one.
number_one

실행하면 다음과 같은 결과를 받게됩니다.

This is the first function speaking...
This is now the second function speaking...

프롬프트에서 함수 호출

일반적으로 사용되는 함수에 대한 정의를 .profile. 이러한 정의는 로그인 할 때마다 사용할 수 있으며 명령 프롬프트에서 사용할 수 있습니다.

또는 파일의 정의를 그룹화 할 수 있습니다. test.sh을 입력 한 다음 현재 쉘에서 파일을 실행합니다.

$. test.sh

이것은 내부에 정의 된 함수를 일으키는 효과가 있습니다. test.sh 다음과 같이 현재 셸에 읽고 정의됩니다.

$ number_one
This is the first function speaking...
This is now the second function speaking...
$

셸에서 함수 정의를 제거하려면 다음과 함께 unset 명령을 사용합니다. .f선택권. 이 명령은 쉘에 대한 변수 정의를 제거하는데도 사용됩니다.

$ unset -f function_name