Вычислите область с чтением и функцией

Я намереваюсь вычислить область круга.

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

Выполненный, но возврат ничто

$ bash area.sh
Enter a radius: 9

Затем осуществлять рефакторинг его путем заключения в кавычки

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

Это все еще не работает правильно.

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

Как сделать такое вычисление?

1
задан 10 April 2018 в 05:25

2 ответа

Функции в ударе не имеют названных параметров. Вы не можете сделать:

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

Можно сделать:

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"
}

И затем:

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

С тех пор return устанавливает статус выхода функции, тогда как $(area) использует вывод функции. Они отличаются.

Кроме того, в то время как удар не поддерживает арифметику с плавающей точкой, он действительно поддерживает возведение в степень:

$ bash -c 'echo $((3 * 3 ** 2))'
27
3
ответ дан 3 December 2019 в 06:22

Это - быстрый сценарий, берущий вход радиуса, затем подающего его к функции area() затем повторяя возвращаемое значение. Это работает с bc или двоичный калькулятор установлен.

#!/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"

Пример:

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

Или я подробно остановился на сценарии немного для показа большего количества чтения в переменной или из командной строки или из самого сценария:

#!/bin/bash
function area(){
    areacirc=$(printf "3.14 * $1^2\n" | bc)
    diamcirc=$(printf "2 * $1\n" | bc)
    circcirc=$(printf "2 * 3.14 * $1\n" | bc)
}

#Read in radius from command line or from read
if [[ $1 == "" ]]; then
    read -p "Enter a radius: "
else
    printf "Radius of a cirle is $1\n"
    REPLY=$1
fi

#Send REPLY to area function
area $REPLY

#Print output from variables set by area function
printf "Diameter of a circle is $diamcirc\n"
printf "Circumference of a circle is $circcirc\n"
printf "Area of a circle is $areacirc\n"

Пример:

terrance@terrance-ubuntu:~$ ./area.bsh 6
Radius of a cirle is 6
Diameter of a circle is 12
Circumference of a circle is 37.68
Area of a circle is 113.04

или

terrance@terrance-ubuntu:~$ ./area.bsh
Enter a radius: 13
Diameter of a circle is 26
Circumference of a circle is 81.64
Area of a circle is 530.66
5
ответ дан 3 December 2019 в 06:22

Другие вопросы по тегам:

Похожие вопросы: