저는 쉘 스크립팅을 배우고 있으며 쉘 스크립트에서 함수를 사용하는 방법을 연구하고 있습니다. 스크립트는 사용자가 정의한 두 개의 숫자를 사용하여 기본 수학 계산기로 실행되어야 합니다. 덧셈, 뺄셈, 곱셈, 나눗셈이 있어야 합니다. 스크립트가 실행될 때 결과를 생성하는 함수에 액세스할 수 없는 것 같습니다. 다음 줄에서 중지됩니다: "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))
}