Calcular área com leitura e função

1

Pretendo calcular a área de um círculo.

#! /usr/local/bin/bash
read -p "Enter a radius: " 
area () {
    a=$(( 3 * $REPLY * 2 ))
    return $a
}
echo $(area)

Corra, mas não devolva nada

$ bash area.sh
Enter a radius: 9

Em seguida, refatore-o citando

#! /usr/local/bin/bash
read -p "Enter a radius: "  radius
area (radius) {
    a=$(( 3 * $radius * 2 ))
    return "$a"
}
echo "$(area)"

Ainda não funciona corretamente.

bash area.sh
Enter a radius: 9
area.sh: line 3: syntax error near unexpected token 'radius'
area.sh: line 3: 'area (radius) {'

Como fazer tal cálculo?

    
por JawSaw 10.04.2018 / 04:02

2 respostas

3

As funções no bash não possuem parâmetros nomeados. Você não pode fazer:

area (foo) { ...
function area (foo) { ...

Você pode fazer:

area () {
    local radius a   # set a local variable that does not leak outside the function
    radius=$1   # Save the first parameter to local variable
    a=$(( 3 * radius * 2 ))
    echo "$a"
}

E então:

echo "$(area "$REPLY")"  # use $REPLY as the first argument

Como return define o status de saída da função, enquanto $(area) usa a saída da função. Estes são diferentes.

Além disso, enquanto o bash não suporta aritmética de ponto flutuante, ele suporta exponenciação:

$ bash -c 'echo $((3 * 3 ** 2))'
27
    
por muru 10.04.2018 / 04:30
5

Este é um script rápido que recebe a entrada do raio, em seguida, alimenta-o para a função de area() , em seguida, faz eco do valor de retorno. Isso funciona com bc ou calculadora binária instalada.

#!/bin/bash
function area(){
    circ=$(echo "3.14 * $1^2" | bc)
}

#Read in radius
read -p "Enter a radius: "

#Send REPLY to function
area $REPLY

#Print output
echo "Area of a circle is $circ"

Exemplo:

terrance@terrance-ubuntu:~$ ./circ.bsh 
Enter a radius: 6
Area of a circle is 113.04
    
por Terrance 10.04.2018 / 04:14