Script de shell usando a função () não localizando o comando

0

Estou aprendendo scripts de shell e estou estudando como usar a função no shell script. O script deve ser executado como uma calculadora matemática básica com dois números definidos pelo usuário. É suposto adicionar, subtrair, multiplicar e dividir. Quando o script é executado, parece que não consegue chegar à função para produzir os resultados. Ele pára na linha: "1") result = add $ num1 $ num2 ;; e não consegue encontrar o comando. Não tenho certeza do que estou perdendo no meu código.

#!/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: "
    
por Dubu 24.11.2015 / 16:47

2 respostas

3

result=add $num1 $num2

Esta linha é interpretada pelo shell como uma atribuição (result = add), comando ($ num1) e argumento ($ num2). Não é isso que você queria. Para recuperar a saída de uma função, você precisa de substituição de comando:

result=$(add $num1 $num2)
    
por 24.11.2015 / 16:52
0

Suas funções não estão usando os valores passados para eles na linha de comando, eles estão usando as variáveis globais $num1 e $num2 .

Para usar os valores transmitidos, reescreva-os assim:

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

ou

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

    echo $(($num1 + $num2))
}
    
por 24.11.2015 / 23:27