쉘 스크립트에서 function()을 사용하여 명령을 찾을 수 없습니다.

쉘 스크립트에서 function()을 사용하여 명령을 찾을 수 없습니다.

저는 쉘 스크립팅을 배우고 있으며 쉘 스크립트에서 함수를 사용하는 방법을 연구하고 있습니다. 스크립트는 사용자가 정의한 두 개의 숫자를 사용하여 기본 수학 계산기로 실행되어야 합니다. 덧셈, 뺄셈, 곱셈, 나눗셈이 있어야 합니다. 스크립트가 실행될 때 결과를 생성하는 함수에 액세스할 수 없는 것 같습니다. 다음 줄에서 중지됩니다: "1") result=add $num1 $num2;; 명령을 찾을 수 없습니다. 내 코드에서 무엇이 누락되었는지 잘 모르겠습니다.

#!/bin/bash

#function definition

function add()
{
    echo $(($num1 + $num2))
}
function subtract()
{
    echo $(($num1 - $num2))
}
function multiply()
{
    echo $(($num1 * $num2))
}
function divide()
{
    echo $(($num1 / $num2))
}

#Main Script
echo "Enter two numbers:"
read num1 num2
echo "Enter 1 for additon, 2 subtraction, 3 multiplication, 4  divison:"
read num3
case "$num3" in
    "1")result=add $num1 $num2 ;;
    "2")result=subtract $num1 $num2 ;;
    "3")result=multiply $num1 $num2 ;;
    "4")result=multiply $num1 $num2 ;;
     * ) echo "You didn't enter 1,2,3,4 for your function." ;;
esac
echo "The result is $result: "

답변1

result=add $num1 $num2

이 행은 쉘에서 할당(result=add), 명령($num1) 및 인수($num2)로 해석됩니다. 그것은 당신이 원하는 것이 아닙니다. 함수의 출력을 검색하려면 명령 대체가 필요합니다.

result=$(add $num1 $num2)

답변2

귀하의 함수는 명령줄에서 전달된 값을 사용하지 않고 전역 변수 $num1$num2.

전달된 값을 사용하려면 다음과 같이 다시 작성하세요.

function add()
{
    echo $(($1 + $2))
}

또는

function add()
{
    local num1="$1"
    local num2="$2"

    echo $(($num1 + $num2))
}

관련 정보