使用读取和函数计算面积

Abs*_*cDo 1 bash

我打算计算一个圆的面积。

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

运行但不返回

$ bash area.sh
Enter a radius: 9
Run Code Online (Sandbox Code Playgroud)

然后通过引用重构它

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

它仍然无法正常工作。

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

如何进行这样的计算?

Ter*_*nce 5

这是一个快速脚本,输入半径,然后将其提供给函数,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"
Run Code Online (Sandbox Code Playgroud)

例子:

terrance@terrance-ubuntu:~$ ./circ.bsh 
Enter a radius: 6
Area of a circle is 113.04
Run Code Online (Sandbox Code Playgroud)

或者我对脚本进行了一些扩展,以显示更多从命令行或脚本本身读取变量的内容:

#!/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"
Run Code Online (Sandbox Code Playgroud)

例子:

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
Run Code Online (Sandbox Code Playgroud)

或者

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
Run Code Online (Sandbox Code Playgroud)