Shell脚本使用function()找不到命令

Shell脚本使用function()找不到命令

我正在学习 shell 脚本,并且正在研究如何在 shell 脚本中使用函数。该脚本应该作为基本数学计算器运行,并由用户定义两个数字。它应该是加、减、乘、除运算。当脚本运行时,它似乎无法访问函数来生成结果。它停在行:“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

该行被 shell 解释为赋值 (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))
}

相关内容